我正在使用while(getchar()!='')清空我的标准,但有时如果我想继续,我需要按Enter键,所以计算继续...为什么?我将发布我的部分代码:
while(1){
if(fgets(buffer,MAX_DIMENSION,stdin)==NULL){ perror("Error"); exit(1);}
}else{
printf("Not correct termn");
while(getchar()!='n');
sleep(1);
}
}
谢谢!
@iharob如果我设置 MAX_DIMENSION=1240 并且我作为输入发送:一个> 1024 的字符串,它仍然是 stdin,所以我必须使用 while(getchar()!='')
你已经使用 fgets
来获取字符串。 该字符串由换行符终止。 然后,您尝试使用 getchar
清空stdin
并获取某些内容 getchar
,您必须输入另一个换行符。 如果这是您想要的,您可以在fgets
后简单地忽略缓冲区。 无需使用 getchar
清空缓冲区。
2 个问题:
1:代码有额外的}
。
// here
if(fgets(buffer,MAX_DIMENSION,stdin)==NULL){ perror("Error"); exit(1);}
}else{
// or at the beginning
2:假设以上不是问题,那么正如@unxnut回答的那样,通常fgets()
包含'n'
,无需清空stdin
。
然而,当行过长并且'n'
没有被fgets()
读取时,那么阅读直到找到结尾是有意义的。
if (fgets(buffer, MAX_DIMENSION, stdin) == NULL) {
perror("Error");
exit(1);
}
if (strchr(buffer, 'n') == NULL) {
int ch;
printf("Not correct termn");
while (((ch = getchar()) != 'n') && (ch != EOF))
;
// while(getchar()!='n');
sleep(1);
}
fgets()
函数,从stdin
中捕获'n'
,您正在使用getchar()
从stdin
中提取'n'
,但它已经被fgets()
消耗了,这就是为什么您需要一个额外的'n'
。
而且,您不会检查getchar()
是否返回EOF
而不是字符。在我看来,while (1)
循环,很难遵循逻辑
char buffer[MAX_DIMENSIONS];
while (fgets(buffer, sizeof(buffer), stdin) == NULL)
{
printf("Not correct termn");
sleep(1);
}
会更好。