소개
게시글
질문&답변
2024.09.09
인자부족으로 인한 종료
안녕하세요? 질문&답변 도우미 Soobak 입니다. 좋은 고민이시네요. 우선, 말씀해주신 내용 중 '파일이 없는 경우 생성되기 전에 프로그램이 종료가 되는 문제점이 발생' 부분에서 '파일이 없는 경우' 라는 표현보다는, ' argv[2] 인수가 없는 경우', 즉, '출력하려는 파일의 이름'이 인수로 전달되지 않은 경우 로 생각해보시면, 해결 방법을 떠올리시는 것이 보다 편하실 것 같습니다. 문제는 다양한 방법으로 해결할 수 있을 것 같습니다. argv[2] 를 활용하여 출력 파일의 이름을 반드시 지정하도록 변경하시는 것이 의도이시라면, 말씀해주신 내용처럼 argc 가 3 이 아닌 경우에 대해서 Usage: 프로그램이름(argv[0]) filename 을 출력하고 프로그램을 종료하는 부분을 Usage: 프로그램이름(argv[0]) 읽을파일이름 출력할파일이름 등과 같이 수정하여, 사용자가 argv[2] 도 함께 입력해야 됨을 알 수 있도록 사용자 친화적으로 변경하는 방법이 있을 것 같습니다. 또는 일종의 '기본값' 설정처럼, argc 가 2 인 경우, 즉, 읽어들일 파일의 이름만 인수로 전달된 경우에는 현재와 같이 "output.txt" 문자열을 생성 파일의 이름으로 사용하되, argc 가 3 인 경우, 즉, 출력 파일의 이름 또한 인수로 전달된 경우에는 "output.txt" 대신 argv[2] 를 생성 파일의 이름으로 사용하도록 구성할 수도 있을 것 같습니다.
- 1
- 1
- 9
질문&답변
2024.09.09
변수 선언이 주소값에 접근하는거라고 하셨는데
안녕하세요? 질문&답변 도우미 Soobak 입니다. 네, 비슷하지만 조금 다른 관점에서 이해하시는 것이 올바른 것 같습니다. 모든 변수는 메모리의 특정 위치에 저장됩니다. 이 때, 이 메모리의 위치가 바로 '변수의 주소' 이며, 컴파일러와 운영체제가 변수의 주소들을 관리해주어 프로그래머가 변수의 주소값에 접근할 수 있도록 도와주는 것입니다.
- 1
- 1
- 6
질문&답변
2024.09.05
printf("\n", r); 질문있어요
안녕하세요? 질문&답변 도우미 Soobak 입니다. 첨부해주신 코드 중 void print_binary() 함수는 재귀 호출을 진행해야 합니다. 해당 내용은 반복문을 이용한 구현과 재귀 호출을 이용한 구현, 각각의 경우를 비교하는 강의의 핵심인 부분이오니, 첨부 내용을 참고하시어 이해하신 후 오타를 수정하시면 좋을 것 같습니다. void print_binary(unsigned long num) { int r = num % 2; if (num >= 2) print_binary(num / 2); // 이 부분을 이렇게 수정해주세요. printf("%d", r); return; } 출력 결과 (사진) 수정된 전체 코드 void print_binary(unsigned long n); void print_binary_loop(unsigned long n); int main() { unsigned long num = 10; print_binary_loop(num); print_binary(num); printf("\n"); return 0; } void print_binary_loop(unsigned long num) { while (1) { int q = num / 2; int r = num % 2; printf("%d", r); num = q; if (num == 0) break; } printf("\n"); } void print_binary(unsigned long num) { int r = num % 2; if (num >= 2) print_binary(num / 2); printf("%d", r); return; }
- 1
- 1
- 17
질문&답변
2024.09.02
예제 만들기 질문
안녕하세요? 질문&답변 도우미 Soobak 입니다. 네, 잘 작성하셨습니다. scanf() 함수를 활용하여 사용자로부터 입력을 받을 때, 입력 을 위한 Enter 키로 인하여 버퍼에 남게되는 개행 문자 ( '\n' ) 를 제거해주는 것이 목적이므로, 작성하신 코드의 구조와 로직 흐름 상에서 문제 없이 잘 작성하신 것 같습니다. 👍
- 1
- 1
- 16
질문&답변
2024.09.01
이게 무슨 내용인지 감도 안잡힙니다...
안녕하세요? 질문&답변 도우미 Soobak 입니다. 어려우신 것이 당연합니다. 강의 중 교수님께서 함께 설명해주시는 내용처럼, 해당 함수의 정확한 해석 방법은 바로 이어지는 강의 14.24 복잡한 선언을 해석하는 요령 에서 자세하게 학습하시게 됩니다. 이어지는 강의를 학습하신 이후, 해당 함수를 해석하시는 데에 참고가 되시길 바라며 설명을 첨부드려봅니다. 또한, 실무에서 이렇게 복잡하게 함수를 선언하는 경우는 흔하지 않으니, 문법 학습 단계에서 다양한 사례를 접해보며 자신감을 챙기는 마음으로 학습해보시는 것을 추천 드려봅니다. char(*complicated_funciton1()))[3] 에서 complicated_function1 은 함수 이름입니다. 빈 괄호 () 는 이 함수가 매개변수를 받지 않는다는 것을 의미하며, 함수 이름 앞의 * 는 해당 함수가 포인터를 반환한다는 것을 나타냅니다. 이 때, [3] 은 이 포인터가 가리키는 것이 3 개의 원소를 가진 배열이라는 것을 의미하며, 마지막으로 맨 앞의 char 는 배열의 각 원소의 자료형이 char 이라는 것을 나타냅니다. 즉, 종합하면 ' 3 개의 char 으로 이루어진 배열을 가리키는 포인터' 를 반환하는 함수입니다.
- 1
- 1
- 31