我有一个简单的c代码如下:
#define RECORDS_PER_PAGE 24
int main(void) {
int i = 0, n;
char pause_char;
printf("Enter a number as the stop point: ");
scanf("%d", &n);
while (++i <= n) {
printf("i is: %d\n", i);
if (i % RECORDS_PER_PAGE == 0) {
printf("Press Enter to continue...");
while((pause_char = getchar()) != '\n');
}
}
return 0;
}
问题是当我输入30作为停止点时,我得到以下输出:
我是:1 我是:2我希望程序在if条件满足时停止。但它继续没有注意到getchar。但奇怪的是,当我输入例如60作为停止点时,它将给出以下输出:
我是:1 我是:2它将停在(2)但不停止(1)。我现在可能缓冲区中的某些东西导致了这个问题,但我不明白为什么。有没有解释呢?
答案 0 :(得分:1)
问题在于,当您阅读输入时,您可以按ENTER键结束输入,从而为您提供您的号码和\n
,例如30\n
。
因此,您的scanf
会读出该号码并在\n
缓冲区中留下stdin
,
然后getchar()
出现并读取一个字节\n
。
简单但难看的解决方案,添加另一个getchar()
以宣读\n
。 (更好的方法是直接在scanf
阅读中处理它。)