标题:下面的程序为什么要输入两个值后开始判断,而且当输入n或N时exit(0)怎么不退 ...
只看楼主
zoumengmeng
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2009-7-30
结帖率:100%
已结贴  问题点数:20 回复次数:3 
下面的程序为什么要输入两个值后开始判断,而且当输入n或N时exit(0)怎么不退出程序?
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int val( )
{int i;
 srand( (unsigned)time( NULL ) );
 i = rand()%100+1;
 return(i);
}
main()
{int i,m;
 char w;
 printf("please guess a number between 1 to 100:");
 scanf("%d\n",&m);
 i=val();
 do
  {if(m>i)
  {printf("too high,guess again!\n");
   scanf("%d",&m);}
   if(m<i)
   {printf("too low,guess again!\n");
    scanf("%d",&m);}
}while(m!=i);
 printf("good,would you like to play the game again? Y or N\n");
 w=getchar();
     getchar();
     if(w=='n'||w=='N')
     exit(0);
     else
     main();



}
搜索更多相关主题的帖子: 输入 判断 exit 
2009-08-03 14:37
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
得分:3 
第一个问题
scanf("%d\n",&m);

scanf()里不要加'\n'
收到的鲜花
  • zoumengmeng2009-08-04 14:25 送鲜花  1朵   附言:我很赞同
2009-08-03 17:09
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
得分:8 
printf("good,would you like to play the game again? Y or N\n");
w=getchar();
getchar();


要改

方法一:
改为:
printf("good,would you like to play the game again? Y or N\n");
getchar();
w=getchar();



方法二:
printf("good,would you like to play the game again? Y or N:");
w=getchar();
printf("\n");



解释:
C语言中,当输入输出都定位在屏幕时,若printf()中含有'\n',且马上读入字符,那么系统会把换行符作为第一个字符让程序读入,所以,你的代码w得到的是'\n',也就是10,应先舍弃它,第二次读的才是正确的,第一种方法就是如此。
第二种方法就是先不输出换行符,读完用户命令后再输出换行符。

推荐:
可以将第二种方法中的 getchar(); 语句替换为 getch(); 语句,其他不变。
getch()只从键盘读取字符,不在屏幕上显示,适用于单按键命令输入(如游戏中按上下左右键或WASD键)。

[[it] 本帖最后由 CrystalFan 于 2009-8-3 17:34 编辑 [/it]]
收到的鲜花
  • zoumengmeng2009-08-04 14:25 送鲜花  2朵   附言:我很赞同
2009-08-03 17:19
xdzhangtao
Rank: 2
等 级:论坛游民
帖 子:6
专家分:34
注 册:2008-7-31
得分:9 
改成这样
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int val( )
{int i;
srand( (unsigned)time( NULL ) );
i = rand()%100+1;
return(i);
}
main()
{int i,m;
char w;
do
{printf("please guess a number between 1 to 100:");
scanf("%d",&m);

i=val();
do
  {if(m>i)
  {printf("too high,guess again!\n");
   scanf("%d",&m);}
   if(m<i)
   {printf("too low,guess again!\n");
    scanf("%d",&m);}
}while(m!=i);
printf("good,would you like to play the game again? Y or N\n");
getchar();
 w=getchar();
     if(w=='n'||w=='N')
     exit(0);
     }while(1);



}
收到的鲜花
  • zoumengmeng2009-08-04 14:26 送鲜花  2朵   附言:我很赞同
2009-08-03 17:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-281420-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023432 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved