[font=宋体]这是本人写的一个猜数程序,编译运行发现了一个问题,当猜数猜错的时候,“scanf("%c",&tag);”语句没有被运行,循环体直接退出。自己找了很久,也测试过,也修改过,就是“scanf("%c",&tag);”不能运行。把它修改为“tag=getchar();”语句,同样是不能运行。在“scanf("%c",&tag);”语句上方和下方各添加一条“printf("%c\n",tag);”语句,只有上方的“printf("%c\n",tag);”语句打印出“y”,下方的没有打印出什么结果。把“scanf("%c",&tag);”语句换为“tag='y';”语句,循环体能循环运行,直到猜对数字才能退出循环体。想来想去,始终找不出问题出在哪。以下是源代码。希望得到大家的指点![/font]
/**************************************************************/
#include
#include
#include
int fun_num(void);
int main(void)
{
char tag='y';
int g_num;
while(tag=='y')
{
printf("Please Input Your Guessing Number(0-9):\n");
scanf("%d",&g_num);
if(g_num==fun_num())
{
printf("Congratulations!\n");
break;
}
else
{
printf("You are so unlucky!\n");
printf("Do you want to try again?(y/n)\n");
scanf("%c",&tag);
}
}
return 0;
exit(0);
}
int fun_num(void)
{
int no;
srand(time(NULL));
no=rand()%10;
return no;
}
/**************************************************************/
程序运行的结果:
[attach]21092[/attach]
tamialiu3 于 2009-11-23 22:29:43发表:
是输入缓冲区的残余字符问题 把
一般的C书上都会指出来的啦 关于scanf() printf()格式问题
哈哈
liuchun12255 于 2009-11-23 20:58:49发表:
好东西
zailushang 于 2009-11-08 19:52:35发表:
也可用fflush(stdin);
#include
#include
#include
int fun_num(void);
int main(void)
{
char tag='y';
int g_num;
while(tag=='y')
{
printf("Please Input Your Guessing Number(0-9):\n");
scanf("%d",&g_num);
if(g_num==fun_num())
{
printf("Congratulations!\n");
break;
}
else
{
printf("You are so unlucky!\n");
printf("Do you want to try again?(y/n)\n");
fflush(stdin);
scanf("%c",&tag);
fflush(stdin);
}
}
return 0;
exit(0);
}
int fun_num(void)
{
int no;
srand(time(NULL));
no=rand()%10;
return no;
}
jiangxhr 于 2009-11-08 12:43:22发表:
printf("Do you want to try again?(y/n)\n");
scanf("%c",&tag);
这个是因为\n是两个字符,会被scanf吸收掉,你不妨再把tag打印出来,用%d打印,会显示10(或者13,记得不是很清楚了),解决这个方法除了前面加while (getchar()!='\n');,还有一个比较快捷的解决方法,就是写成scanf(" %c",&tag);(第一个双引号和%c之间加一个空格)。
或者把printf("Do you want to try again?(y/n)\n");中最后的\n去掉也可以,请楼主尝试一下
key120 于 2009-10-31 22:59:24发表:
scanf前最好都加上while (getchar()!='\n');这一句
不错 记住!
guorui860311 于 2009-10-30 21:37:57发表:
学习一下了。。。
寻路行者 于 2009-10-17 22:54:11发表:
4# alick
呵呵……漏了一个“;”。现在问题是解决了,还是有点不明白。这种问题,我还是第一次撞见。谢谢你!
alick 于 2009-10-17 22:02:41发表:
3# 寻路行者
那是因为那一句你写错了。应该是:[code]while (getchar() != '\n');[/code]我试过了,没问题~
寻路行者 于 2009-10-17 21:46:51发表:
2# alick
添加“while(getchar!='\n')”后,可以实现循环,但“scanf("%c",&tag);”语句依然如同虚设。
[attach]21105[/attach]
alick 于 2009-10-17 19:15:32发表:
需要吃字符的!scanf前最好都加上while (getchar()!='\n');这一句,
把缓冲区内的字符(包括换行符)都吃掉。