2014-11-17 8 views
0

Enter 키에 문자를 읽을 때 내가 : 1
난입니다 : 2
내가 : 3
...
내가되고 ... 내가 24
을 눌러 계속 입력 : 25
...
i는 : 30
getchar가 문제는 검사가 나는 다음과 같은 간단한 C 코드가

If 조건이 충족되면 프로그램이 중지 될 것으로 예상됩니다. 그러나 getchar에주의하지 않고 계속됩니다.

전은 다음과 같습니다 : 1
난입니다 : 2
난이 : 나는 다음과 같은 출력 줄 것이다 정지 지점으로 예 (60)에 입력 때 이상한 부분은 3
을 ...
전 이다
24 (1) [계속 입력 ... I은 : I가
30
... : 46
제가 는 47
,536 난이다
25
...난입니다 : 48
(2)을 눌러 계속합니다 ... 난이
: 49
...
난입니다 : 59
내가한다 : 60

그것은 (에서 중지됩니다 2)는 아니지만 (1). 지금 버퍼에서 뭔가가이 문제를 일으킬 수는 있지만 왜 그 이유는 모르겠다. 그것에 대한 설명이 있습니까?

+1

, &n);'->'는 scanf ("% d 개 %의 *의 C", &n); ' – pm100

+1

'는 scanf ("% d 개"를 반환 getchar가 – BLUEPIXY

+0

@BLUEPIXY, thanks – sadrzadehsina

답변

1

입력을 읽을 때 입력을 마치면 숫자가 \n30\n과 같이 입력이 끝납니다.

그래서 당신의 scanf 숫자를 판독하고 stdin 버퍼에 \n 잎, 는 getchar()\n을 함께 제공하고 바이트를 읽습니다.

단순하지만 못생긴 해결책이 다른 getchar()을 추가하여 \n을 읽습니다. (좋네요 방법은 직접 scanf에서 그것을 처리하기 위해 읽기입니다.)

하는 int가 아닌 문자
+0

고마워. 또 다른 getchar()을 추가하면 문제가 해결되지만 scanf에서 처리하는 방법을 설명하겠습니까? – sadrzadehsina

+0

확인했습니다. – sadrzadehsina