달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

Apple,banana,tomato라는 문자열들의 각 글자를 caStr에 넣어 출력을 하는 것이다.

아래 코드에서는 일일이 수동대입을 하고 있다. 개 노가다다ㅜㅜ

성실함은 인생을 불행하게 함으로. 아래 노가다 코드를 반복문으로 바꾸어 보자.

 

 

간단히 요약하면, '과일이름'이라는 문자열의 주소를 배열로 만들었다. 즉, 포인터 배열을 활용하였다.

* 포인터 배열을 쓰지 않고 하는 것이 훨씬 쉽다. 다만, 나름데로의 장점 (과일의 개수변동, 과일명칭 길이 변동 등에 대한 코드 수정이 용이)이 있어 이와 같이 하였다. 님이 초심자이거나 코드가 더러워서 어렵게 보인다면…apple문자 넣는 반복문, banana용 반복문, tomato용 반복문 등을 따로 따로 만들기를 강추!!!!! 하는 바이다. 그리고 fruit[]같은 과일 배열 (과일이름이 원소. 즉, 포인터 배열)을 안 써도 된다.).

다시 말하지만, 아래 코드는 해석하기 어려우므로 임산부나 초심자는 이쯤에서 포기해라 (이리 말해주면 승부욕 발동될 걸 잘 안다 ㅋ).

 

상세한 풀이는 아래와 같다.

  1. 특징 : Fruit[]이라는 배열에 과일명칭 문자열의 주소(cpApple,cpBanana,cpTomato)를 원소로 삽입한다.

    향후 과일이 추가될 때에는, 이 배열의 원소만 추가시키면 된다.

  2. 기본설명 : fruit[1]+fruitcharnum(0)은 "apple"의 'a'의 주소. fruit[1]+fruitcharnum(1) 은 "apple"의 'p'의 주소이다.
  3. 변수사용

    Straddrnow: 아래 반복문에서 casstr[]배열에 원소를 지정하기 위해서이다.castr[straddrnow]='글자' 식으로 쓴다.

    Fruitnow: 아래 반복문에서 caStr에 대입할 과일을 지정하는 수이다. Fruitnowp=fruit[fruitnowp]+fruitcharnum;

                                 castr[straddrnow]=*fuitnowp; 식으로 쓴다.

    Fruitnum : 과일의 개수. fruit[]배열의 길이가 자동으로 구해진다.

 

  1. 반복문
    1. if실행식 (문자대입식) : 맨 처음 fruitnow=0, fruitcharnow=0이다. 따라서, 'Fruitnowp=fruit[fruitnow]+fruitcharnum'에서 fruit[fruitnowp]가 fruit[1]의 된다. Fruit[1]은 "banana"의 주소(즉,'b'의 주소)이므로, if문 안에서 castr[0]에는 *(fruit[1]의 주소="banana"의 주소='b'의 주소)가 들어간다.
    2. 문자대입 조건 : if문은 ' *fruitnowp가 null 아닐 때'를 조건으로 한다. apple에서 e뒤에는 null 들이 있다. 따라서 e를 넣고 난 후에 다음 반복문 수행시에는 e다음의 널이 와서, else문을 수행하게 된다.
    3. Else 실행식 (대상과일 변경, 초기화): e다음에 널이 왔다는 것은 과일이름 하나를 다 넣었다는 것이다. 따라서 다음 과일로 넘어가기 위해 fuitnow++해주고 fruitcharnum=0을 해준다. 그러면, 반복문을 다음 수행할 때에는 if문을 수행하여 fruitnowp=fruit[fruitnowp=1]+fruitcharnum(=0)'이 된다. fruit[1]+fruitcharnum(0)은 "apple"의 'a'의 주소. fruit[1]+fruitcharnum(1) 은 "apple"의 'p'의 주소이다.

 

 

자, 이번에는 중간에 pineapple을 추가해 보자. 아래 그림에서와 같이 기존코드의 선언부에 pineapple문자열 포인터 추가, fruite 배열에 이를 추가. 하면 끝이다. 삽입 코드를 별도로 길게 작성할 필요가 없다!단,,, 워닝이 x라 많다..bb

  1. 출력 형태에 따라 이상한 버그 혹은 메시지가 뜬다 : "startup initialized natural state" 뭐 이런 메시지가 들어 있다.

 

프로그래밍을 처음 배우는 사람은 어려워 보일 수 있다. 하지만 차근차근 하다 보면, 감이 잡히게 될 거이다. 이상으로 과일이름 출력을 문자열,배열,포인터 배열, 반복문을 사용하여 해 보았다. 변수명 등은 댓글로 물어보고.

도움이 되었다 싶으시면 손가락을 꾹 눌러줄래??ㅎㅎ

Posted by C언어 보이
|