永发信息网

为什么第一次按一次回车可以得到一个语句,接下来就需要按两次回车,即使输入了n,也需要按两次回车

答案:3  悬赏:40  手机版
解决时间 2021-03-23 06:05
  • 提问者网友:伴风望海
  • 2021-03-22 10:31
为什么第一次按一次回车可以得到一个语句,接下来就需要按两次回车,即使输入了n,也需要按两次回车
最佳答案
  • 五星知识达人网友:第幾種人
  • 2021-03-22 11:10
这个主要是因为你敲入回车符后也被读入系统了。我调整了一下,做了下面的代码,你看看是不是你想要的效果?
#include
int main()
{
int guess = 1;
printf("Pick an integer from 1 to 100. I will try to guess ");
printf("it.
Respond with a y if my guess is right and with");
printf("
an n if it is wrong. End the game with q.
");
printf("Uh...is your number %d?
", guess);
char ch = getchar();
char ch1 = getchar();
while(ch1!='
')
{
ch1 = getchar();
}
while(ch!='q')
{
if(ch=='y')
{
printf("I knew I could do it!
");
return 0;
}else if(ch=='n')
{
printf("Well, then, is it %d?
", ++guess);
ch = getchar();
char ch1 = getchar();
while(ch1!='
')
{
ch1 = getchar();
}
}else
{
printf("Please enter y(yes) or n(no) or q(quit)...
");
ch = getchar();
char ch1 = getchar();
while(ch1!='
')
{
ch1 = getchar();
}
}
}
printf("Game ended with failure!
");
return 0;
}代码中
char ch1 = getchar();
while(ch1!='
')
{
    ch1 = getchar();
}主要是用来吃掉换行符之前的所有字符以及换行符的,这样能够保证对用户输入的鲁棒性。
追问其实我主要想问,按照我原来的代码应该是敲一次回车就会输出一行“Well, then, is it",可为什么在第一次输入回车之后,第二次需要输入两次回车才有那句话输出。
全部回答
  • 1楼网友:枭雄戏美人
  • 2021-03-22 12:23

编译器的问题。

代码原封不动地复制,可以正常运行的,你写的没问题。

想要达到错误的效果,那就应该是while ((getchar()) != ' ') continue;中 getchar()被运行了两次,你试着把 getchar ()外面的()去掉。

用过C-free,输入不能超过8次,不然保证退出,在知道上提问过,解决不了,现在问题还挂着呢。

补充:你还不相信我,真的是你的编译器异于他人,假设你所有的输入是:n回车,(等待语句),na回车,(等待语句),y回车;第一个 getchar()称为外部 get,第二个 getchar()称为内部 get。程序的运行应该是这样的:n 被读入外部 get,进入外部循环,输出语句,回车被读入内部 get,未进入内部循环(第一次输入的结果运行结束),进行下一次外部循环;n 被读入外部get,进入外部循环,输出语句,a 被读入内部get,进入内部循环,回车被读入内部get,break(第二次输入的结果运行结束),进入下一次外部循环;y 被读入外部 get,循环结束。

  • 2楼网友:洎扰庸人
  • 2021-03-22 12:05
久大姐恋医血型劝
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯