C语言猜拳程序 scanf不执行……
答案:3 悬赏:50 手机版
解决时间 2021-03-18 03:49
- 提问者网友:听门外雪花风
- 2021-03-17 10:18
#include
#include
#include
int main(){
int userchoice,computerchoice,result,b;
char a;
a='y';
do
{
printf("Please input your choice:\n0 paper\n1 scissors\n2 rock\n");
scanf("%d",&userchoice);
switch(userchoice){
case 0:
printf("You pick paper\n");
break;
case 1:
printf("You pick scissors\n");
break;
case 2:
printf("You pick rock\n");
break;
default:
printf("Error!\n");
}
srand(time(0));
computerchoice = rand()%3;
switch(computerchoice){
case 0:
printf("Computer pick paper\n");
break;
case 1:
printf("Computer pick scissors\n");
break;
case 2:
printf("Computer pick rock\n");
break;
}
result = userchoice - computerchoice;
switch(result){
case -2:
printf("You Wins!\n");
break;
case -1:
printf("Computer Wins!\n");
break;
case 0:
printf("Tie!\n");
break;
case 1:
printf("You Wins!\n");
break;
case 2:
printf("Computer Wins!\n");
break;
default:
printf("Error!\n");}
printf("Do you want to paly again?(y/n)\n");
scanf("%c",&a);}
while(a='y');
}
我是我变得一个猜拳程序,编译成功了,但是运行的时候不执行scanf("%c",&a);
也就是说进入死循环了,为什么……
while(a=='y'); 的问题好像已经改过了,但是还是不行,scanf不执行,现在整个程序只运行一次,不循环……一开始是赋值,否则计算机为什么要开始运行那个猜拳程序呢?我新学的,很多东西不都会,望高手指点……
最佳答案
- 五星知识达人网友:雪起风沙痕
- 2021-03-17 11:37
//当你输入y或者n的时候,按下了回车。而程序只把第一个字符y或者n读入给a,回车\n还在缓冲区中,也算一个字符。所以第二次scanf的时候,由于缓冲区内有个回车,它直接读取出来了。而不是让你输入。然后跳出while循环直接结束了。关于这方面的内容可以在网上搜点资料看看
#include
#include
#include
int main()
{
int userchoice,computerchoice,result,b;
char a;
a='y';
do
{
printf("Please input your choice:\n0 paper\n1 scissors\n2 rock\n");
scanf("%d",&userchoice);
switch(userchoice){
case 0:
printf("You pick paper\n");
break;
case 1:
printf("You pick scissors\n");
break;
case 2:
printf("You pick rock\n");
break;
default:
printf("Error!\n");
}
srand(time(0));
computerchoice = rand()%3;
switch(computerchoice){
case 0:
printf("Computer pick paper\n");
break;
case 1:
printf("Computer pick scissors\n");
break;
case 2:
printf("Computer pick rock\n");
break;
}
result = userchoice - computerchoice;
switch(result){
case -2:
printf("You Wins!\n");
break;
case -1:
printf("Computer Wins!\n");
break;
case 0:
printf("Tie!\n");
break;
case 1:
printf("You Wins!\n");
break;
case 2:
printf("Computer Wins!\n");
break;
default:
printf("Error!\n");}
printf("Do you want to paly again?(y/n)\n");
fflush(stdin); //清除缓冲区内的内容
scanf("%c",&a);
} while(a=='y');
}
全部回答
#include
main()
{int result,month,age;
char c;
printf("\ninpit your result:");
scanf("%d",&result);
if (result<-14||result>1184)
{printf("wrong result!press any key for end...\n");
scanf("%c",&c);
exit(0);
}
month=(result+115)/100;
age=(result+115)%100;
printf("your age is:%d,month:%d",age,month);
}
scanf()函数是从键盘缓冲区取数据,而不是直白的理解为我按一个键它才取走,因为你按下的键都被存入缓冲区,也就是说。你的这个函数没有起作用是因为你的键盘缓冲区还有字符,于是scanf()就不等你按下键,直接从缓冲区取走了。
记住scanf()不是直接和你打交道,你和scanf()之间还有个键盘缓冲区这样的中间代理人。
所以你的程序会出现没等你输入就直接结束了。
解决办法:
在scanf()前加入fflush(stdin);语句,你先不必观这个函数怎么来的,你只需要知道,你这样做了,键盘缓冲区就被清空。
以上是针对scanf()来说的。
但就你的程序目的来说。你用scanf()来让程序暂停很不好!
解决办法:
调用dos命令:
把scanf()语句换成 system("pause");
就可以让程序暂停了。这个语句是所有编译器都支持的。而且很安全。
不过这样做调用的是dos操作系统命令,只在win系统下用。不过已经满足你的连续需求了。
最后,你的程序结构有店不好。
你的
if (result<-14||result>1184)
{printf("wrong result!press any key for en缉害光轿叱计癸袭含陋d...\n");
scanf("%c",&c);
exit(0);
}
你暂停继续运行之后,程序马上退出了,你后来的语句就没法执行了,我相信这不是你的本意吧。
- 2楼网友:woshuo
- 2021-03-17 11:46
#include
#include
#include
int main(){
int userchoice,computerchoice,result;
clrscr();
do
{
printf("Please input your choice:\n0 paper\n1 scissors\n2 rock\n");
scanf("%d",&userchoice);
switch(userchoice){
case 0:
printf("You pick paper\n");
break;
case 1:
printf("You pick scissors\n");
break;
case 2:
printf("You pick rock\n");
break;
default:
printf("Error!\n");
}
srand(time(0));
computerchoice = rand()%3;
switch(computerchoice){
case 0:
printf("Computer pick paper\n");
break;
case 1:
printf("Computer pick scissors\n");
break;
case 2:
printf("Computer pick rock\n");
break;
}
result = userchoice - computerchoice;
switch(result){
case -2:
printf("You Wins!\n");
break;
case -1:
printf("Computer Wins!\n");
break;
case 0:
printf("Tie!\n");
break;
case 1:
printf("You Wins!\n");
break;
case 2:
printf("Computer Wins!\n");
break;
default:
printf("Error!\n");
}
printf("Do you want to paly again?(y/n)");
getchar();
}
while(getchar()=='y');
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯