아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
하얀고슴도치236
하얀고슴도치23621.05.28

C 언어에서 scanf 를 반복문 등으로 다시 받으면 왜 입력받지 않았는데 받은것으로 처리되나요??

C 언어에서 scanf 를 반복문 등으로 다시 받으면 왜 입력받지 않았는데 받은것으로 처리되나요??

예를 들어서

while(1){scanf(A)

print(A)}

이런식으로 처리할때 처음에는 scanf 로 A를 받고 진행되지만

그 이후부터는 입력하지도 않았는데 공백문자 처리되며 계속 print 만 찍힙니다.

55글자 더 채워주세요.
답변의 개수
2개의 답변이 있어요!
  • scanf문제는콘솔창에서 입력한 데이터중 엔터값이 버퍼스트림에 남아 있으면서 생기는 문제 입니다

    예를 들면 숫자와 문자를 입력받아야 할경우

    scanf('%d',&a);

    scanf('%c',&b);

    와 같이 코딩하게 됩니다

    콘솔창에

    10을 입력하고 엔터를 입력하면 10은 a변수에 할당이 되지만

    엔터값은 버퍼에 그대로 남게 되어 다음변수 b에 할당이 됩니다

    이를 해결하기위한 다양한방법 중 하나로 getchar()함수를

    중간에 한줄 넣어 엔터값을 처리해주면 됩니다


  • 안녕하세요. 작성하신 질문은 저도 C언어를 처음 배울 때 똑같은 문제를 겪었습니다.

    컴퓨터는 기본적으로 Buffer라고 하는 일종의 임시 저장소를 갖고 있습니다.

    scanf를 이용해서 지속적으로 글을 입력받기를 원한다면, Buffer를 비워주어야 합니다.

    즉 print(A)를 한 후에, fflush(stdin) 를 추가해서 buffer를 비워주고, 다시 입력받고 해야 합니다.