使用while(getchar()!=' \ n')我清空stdin,但是我必须按Enter键

时间:2015-04-22 17:40:51

标签: c unix fgets enter getchar

我正在使用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')

3 个答案:

答案 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()