Ignore在while循环中第二次运行,C

时间:2014-09-24 18:01:41

标签: c

当我尝试第二次运行此循环时它打印"输入一个句子"但跳过gets部分。并且instaly要求运行循环agian的答案。我可以使用scanf如果问题仍然需要空格。

程序看起来像。

输入一句话:你

再来一次? y / n:y

不错的选择!

输入一句话:

再来一次?是的:

int main(void){
  char user_input[20];
  int boolean = 0;
  char val[2];

  do{
      printf("Enter a sentence: ");
      gets(user_input);

      printf("%s\n", user_input);

      printf("One more time? y/n: ");
      scanf("%c", &val[0]);

      if(val[0] == 'y'){
        boolean = 1;
        printf("Good choice!\n");
      }else if(val[0] == 'n'){
        printf("You are really quiting?\n");
        boolean = 0;
      }

  }while(boolean);
  return 0;
}

2 个答案:

答案 0 :(得分:1)

那是因为你的stdin缓冲区里面仍然有新的行字符,因此"得到"需要
换行符作为输入,你没有机会进入你的作品。
在scanf之后使用 getchar()来读取换行符,如:

scanf("%c", &val[0]);
getchar();

或者您可以在scanf函数中进行一些调整:

scanf("\n%c", &val[0]); // insert a newline character in the beginning.

答案 1 :(得分:0)

当您输入y / n时的ans scanf()获取字符,换行符由gets()获取。 你的代码需要像这样的一点修改......

int main(void)
{
     char user_input[20];
     int boolean = 0;
     char val[2];

  do{
     printf("Enter a sentence: ");
     gets(user_input);

     printf("%s\n", user_input);

     printf("One more time? y/n: ");
     scanf("%c", &val[0]);
     getchar();

     if(val[0] == 'y')
     {
         boolean = 1;
         printf("Good choice!\n");
     }
     else if(val[0] == 'n')
     {
         printf("You are really quiting?\n");
         boolean = 0;
     }

  }while(boolean);

 return 0;
}

getchar()函数接受换行符...所以,gets()没有采用换行符并且没有错误发生......