C语言 使用 while(getchar()!='') 我清空了标准,但我必须按回车键



我正在使用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 来获取字符串。 该字符串由换行符终止。 然后,您尝试使用 getcharstdin并获取某些内容 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); 
}

会更好。

最新更新