인프런 커뮤니티 질문&답변

김김김님의 프로필 이미지
김김김

작성한 질문수

홍정모의 따라하며 배우는 C언어

13.4 텍스트 파일 입출력 함수들

아래 질문에 대해 추가 질문 드립니다.

작성

·

187

0

아래의

배열의 크기와 fprintf에 대해 질문

에 대한 질문글에서

while의 구조에 대해 생각해보시라고 했는데

도저히 잘 모르겠습니다..

#include <stdio.h>

int main()
{
    char words[3] = {0};

    while ((scanf("%s", words) == 1) && (words[0] != '.')) {
        printf("%s\n", words);
        printf("%c\n", words[0]);
        printf("%c\n", words[1]);
        printf("%c\n", words[2]);
        printf("%c\n", words[3]);
        printf("%c\n", words[4]);
        printf("%c\n", words[5]);
        printf("%c\n", words[6]);
    }
    /*scanf("%s", words);
    printf("%s\n", words);*/

    return 0;
}

제가 좀 정확히 확인하고 싶어서 만든 코드인데 디버거 찍어봐도 잘 모르겠습니다. 경고줄만 그이고 입력한 대로 잘 나오더라구요. 주석코드는 당연히 에러가 떴고요.

 

항상 이런 기본 질문만 해서 죄송하고 일일히 답변해주시느라 수고 많으십니다...

답변 1

1

안녕하세요 :)

우선 첨부해주신 코드는 배열의 크기와 fprintf에 대해 질문에 해당하는 코드와 다른 것 같습니다.

질문이 "#define MAX 31 가 무관하게 반복문에서 스페이스바나 엔터로 단어 31개를 넘게 입력이 되는 이유"가 맞을까요? 우선 맞다는 전제 하에 말씀을 드리자면, 이 부분에 대해서는 제가 직접 답을 드리기보다는 "(printf가 아닌) breakpoint를 찍고 while loop의 실행을 관찰하라"고 답변드리고 싶습니다,

기본적인 질문을 하는 것에 대해서는 전혀 잘못이 아닙니다, 걱정 않으셔도 됩니다  :)

다만 (만일 13장까지 제대로 학습을 완료하셨다면) 수업에서 이미 이 질문에 대한 답을 스스로 찾을 수 있는 정도의 지식을 알려주셨다고 생각합니다.

제대로 동작하는 코드를 짜는 것만이 개발의 전부가 아닙니다. 문제를 스스로 진단하고 프로그램의 동작을 분석하는 것 또한 개발의 범위에 포함됩니다. 

질문하신 내용에 대한 답변은 짧습니다. 그럼에도 불구하고 제가 긴 글과 함께 여지를 드리는 것은 수업에서 배운 내용을 토대로 간단한 문제를 진단하고,  그 과정에서 복습을 하는 과정을 꼭 거쳐셨으면 하는 바램 때문입니다. (아마 언급하신 과거 질문 글 속 Hello Yeo님께서도 저와 같은 생각에 저렇게 답변하시지 않았나 생각이 듭니다)

핵심은 while 문의 실행 순서와 입력 함수입니다.

1. breakpoint를 찍어가며

2, while loop의 반복되는 과정에서

3. 어떤 변수에

4. 어떤 값이 담기는지

에 유의하며 관찰해보세요 :)

(혹시 그럼에도 궁금증이 풀리지 않으신다면 다시 한 번 댓글로 말씀해주세요. 상세하게 답변 드리겠습니다.) 

 

김김김님의 프로필 이미지
김김김

작성한 질문수

질문하기