有人可以告诉我为什么第o = getchar();
行只在第一次正常工作,然后一旦工作,一旦不工作?
#include <stdio.h>
int main(void)
{
char o;
for (int i = 1; i > 0; i++)
{
printf("%d\n", i);
if (i % 10 == 0)
{
printf("Do you want to continue? (y/n): ");
o = getchar();
if (o == 'n')
break;
}
}
return 0;
}
答案 0 :(得分:4)
首先,getchar()
会返回int
,这可能不适合char
。变化
char o;
到
int o = 0;
然后,为了实现跳过,它实际上并没有跳过。当您按任意键并按 ENTER 时,按 ENTER 键的newline
将作为每秒getchar()
的馈送迭代循环。
答案 1 :(得分:0)
如Events: insert所述,问题是换行符。在控制台中输入内容后再按“Enter”键,文本就会出现在输入缓冲区中。然后由getchar
读取此缓冲区。但是,getchar
仅在每次调用时读取一个字符。问题是,“Enter”被解释为一个字符('\n'
)并保留在缓冲区中,getchar
将其作为单个字符读取。 getchar
的下一个调用将读取换行符,而不是想要的字符。
解决方案:您可以调用getchar
(在实际调用之后),直到达到换行符,从而清除缓冲区内的读取行。
while (getchar() != '\n')
;
或者只是建立一个小功能
int nextch() {
int ch = getchar();
while (getchar() != '\n')
;
return ch;
}