C:如何让我的程序拒绝超过';y';或';n';?

C:如何让我的程序拒绝超过';y';或';n';?,c,char,buffer,scanf,C,Char,Buffer,Scanf,因此,下面的代码只是一个较大程序的一小部分,其本身运行良好: int main(){ char ansr; scanf("%c", &ansr); while (ansr != 'y' && ansr != 'n'){ printf("\n\tInvalid answer, Please try again."); while(getchar() != '\n'); scanf("%c", &ansr); } if ( ansr == '

因此,下面的代码只是一个较大程序的一小部分,其本身运行良好:

int main(){

char ansr;
scanf("%c", &ansr);


  while (ansr != 'y' && ansr != 'n'){

  printf("\n\tInvalid answer, Please try again.");
  while(getchar() != '\n');
  scanf("%c", &ansr);
}

if ( ansr == 'y') {
  sleep(1);
  printf("\n\tYou've been warned.......\n\n");
  sleep(3);
  }
else if ( ansr == 'n') {
  printf("\n\tGoodbye then.\n\n");
}

return 0;
}

如您所见,用户输入的任何单词如果不是以y或n开头,都将被拒绝,直到有正确答案为止。由于任何以y或n开头的字符都会给出“是”或“否”的结果,因此我如何能包含比字符“y”和“n”长的单词?

使用而不是getchar来检索多个字符。

使用而不是getchar来检索多个字符。

对于此类用例,不要使用
scanf
读取输入。使用
fgets
逐行阅读文本,并使用任何有意义的逻辑处理每一行

int main()
{
   char answer[LINE_LENGTH];  // #define LINE_LENGTH to a sensible value.
   while ( fgets(answer, LINE_LENGTH, stdin) != NULL )
   {
      // Trim the line of the newline character.
      int len = strlen(answer);
      if ( answer[len-1] == '\n' )
      {
         answer[len-1] = '\0';
      }

      if ( strcmp(answer, "y") == 0 ||
           strcmp(answer, "n") == 0 )
      {
         break;
      }

      printf("\n\tInvalid answer, Please try again.");
   }

   if ( strcmp(answer, "y") == 0)
   {
      sleep(1);
      printf("\n\tYou've been warned.......\n\n");
      sleep(3);
   }
   else if ( strcmp(answer, "n") == 0 )
   {
      printf("\n\tGoodbye then.\n\n");
   }

   return 0;
}

对于此类用例,不要使用
scanf
读取输入。使用
fgets
逐行阅读文本,并使用任何有意义的逻辑处理每一行

int main()
{
   char answer[LINE_LENGTH];  // #define LINE_LENGTH to a sensible value.
   while ( fgets(answer, LINE_LENGTH, stdin) != NULL )
   {
      // Trim the line of the newline character.
      int len = strlen(answer);
      if ( answer[len-1] == '\n' )
      {
         answer[len-1] = '\0';
      }

      if ( strcmp(answer, "y") == 0 ||
           strcmp(answer, "n") == 0 )
      {
         break;
      }

      printf("\n\tInvalid answer, Please try again.");
   }

   if ( strcmp(answer, "y") == 0)
   {
      sleep(1);
      printf("\n\tYou've been warned.......\n\n");
      sleep(3);
   }
   else if ( strcmp(answer, "n") == 0 )
   {
      printf("\n\tGoodbye then.\n\n");
   }

   return 0;
}

您应该检查
scanf()
找到了一个字符,并且
getchar()
没有返回EOF。您应该检查
scanf()
找到了一个字符,并且
getchar()
没有返回EOF。很好!此外,由于响应是一个字母,因此3字节字符数组就足够了(2个字符+空终止符)。然后用
fgetc(stdin)
在stdin上“吃掉”字符,直到换行符或EOF。很好!此外,由于响应是一个字母,因此3字节字符数组就足够了(2个字符+空终止符)。然后使用
fgetc(stdin)
在stdin上“吃掉”字符,直到换行符或EOF。