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