当我尝试第二次运行此循环时它打印"输入一个句子"但跳过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;
}
答案 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()没有采用换行符并且没有错误发生......