``` #include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]) { int age = atoi(argv[1]); int num = 0; char role[3][10] = {'일반','청소년','어린이'}; int prices[] = { 1250, 720, 450 }; if ( age >= 19 ) { num = 0; } else if ( age >= 13 ) { num = 1; } else { num = 2; } printf ( "%s(%d세): %d원입니다.", role[num], age, prices[num]); return 0; } ``` 강의 보면서 열심히 공부 중 이지만 아직 모르는게 너무 많네요 ㅎㅎ 열심히 하겠습니다. 늘 친절한 답변 감사합니다. 지하철 요금 조건문에 관련된 문제 입니다. 위에 코드처럼 선생님 코드와 똑같게 하였는데 DEV에서는 결과가 (0세): 450원입니다. 라고 나오네요 클라우드스터딩 홈페이지에 도전에서는 답이 잘 나오는데 왜 그럴까요.. 이 홈페이지에서는 입력값을 따로 입력하는 곳이 있어서 실행이 되는 것 같은데 DEV 같은 곳에서는 입력값을 어떤식으로 입력 해야하는 걸까요? 또 다른 질문들이 있습니다. - int main(int argc, char* argv[]) 이 부분에 int argc, char* argv[]가 무엇인가요? - int age = atoi(argv[1]); 이 부분에서 argv[1]가 의미하는 것이 무엇인가요? - char role[3][10] = {'일반','청소년','어린이'}; 이 부분에서 [10]은 왜 있나요? - int prices[] = { 1250, 720, 450 }; 여기서 []는 왜 안에 숫자를 안 넣는 건 가요? 너무 질문을 많이 한 것 같네요 ㅠㅠ 클라우드 스터딩은 제가 본 강의 중에 최고입니다. 항상 이해 잘 되도록 친절하게 설명해주셔서 감사합니다. 열심히 하겠습니다!
## 답변 입력값 `argv[1]`가 없어서 생기는 문제입니다. 커맨드 라인 실행시 입력값을 넣어보세요. ``` $ ./test 17 ```
## 추가 답변 1. int main(int argc, char* argv[]) 이 부분에 int argc, char* argv[]가 무엇인가요? => 커맨드라인 실행시 전달인자의 수가 `argc`에 전달됩니다. => 이어서 전달된 값들은 `argv` 변수에 문자열의 배열로 저장됩니다. ``` # 커맨드라인 실행 예 $ ./test 하나 둘 셋 # 전달 값 상황 argc = 4; argv[0] = "./test"; argv[1] = "하나"; argv[2] = "둘"; argv[3] = "셋"; ``` 2. int age = atoi(argv[1]); 이 부분에서 argv[1]가 의미하는 것이 무엇인가요? => 위 1번을 참조. 3. char role[3][10] = {‘일반’,’청소년’,’어린이’}; 이 부분에서 [10]은 왜 있나요? => 3개의 문자열을 저장하는데, 각각 최대길이가 10인 문자의 배열로 갖기 위함입니다. ``` role[0] -> { '일', '반', 0, 0, 0, 0, 0, 0, 0, 0 } role[1] -> { '청', '소', '년', 0, 0, 0, 0, 0, 0, 0 } role[2] -> { '어', '린', '이', 0, 0, 0, 0, 0, 0, 0 } ``` 4. int prices[] = { 1250, 720, 450 }; 여기서 []는 왜 안에 숫자를 안 넣는 건 가요? => 배열을 생성과 동시 초기화 하기 때문에, 자동으로 3이라는 값이 측정됩니다. ## PS. 어제 새벽에 정신없이 답글 달다보니 밑에있던 질문들을 놓쳤네요. ㅠ 시간나서 지금이라도 부랴부랴 추가 답글 달아봅니다. 도움이 된다니 제가 힘이나네요. 더 큰 도움이 될 수 있도록 노력하겠습니다! :D 오늘도 좋은 하루 되세요.