| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 809 人关注过本帖
标题:一个简单的猜数字游戏的字符读取问题
只看楼主 加入收藏
jabyshen
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-2-16
收藏
 问题点数:0 回复次数:8 
一个简单的猜数字游戏的字符读取问题
一个简单的猜数字游戏,一次猜字完成后读取一个判断是否继续玩的字符时,总是读取了输入最后一个答案时候的回车输入而不是等待新的输入.怎么解决.大家运行一下就明白怎么回事?猜一次.

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
char p;
void caishu(void)
{
int m,n;
srand(time(NULL));
m=rand()%1000+1;
printf("I havu a number between 1 and 1000.\nCan you guess my number.\nPlease type your frist guess.\n");
scanf("%d",&n);
while(n!=m){
if(n>m){
printf("Too high.Try again.\n");
scanf("%d",&n);
}
if(n<m){
printf("Too low.Try again.\n");
scanf("%d",&n);
}
}
printf("Excellent!You guessed the number!\nWould you like to play again?( y or n ):");
scanf("%c",&p);/*就是这里了,总是自动读取了最后一个正确答案的回车,而不是等待输入*/
}
main()
{
caishu();
while(p=='y'){
caishu();
}
if(p=='n')
printf("Byebye");
while(p!='y'&&p!='n'){
printf("Wrong order\n");
printf("Would you play again?( y or n ):");
scanf("%c",&p);
while(p=='y'){
caishu();
}
if(p=='n')
printf("Byebye");
}
return 0;
}

[此贴子已经被作者于2007-3-28 21:14:31编辑过]

搜索更多相关主题的帖子: 数字 字符 游戏 
2007-03-28 21:13
oooccc1
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-3-21
收藏
得分:0 
[QUOTE]#include<stdio.h>
#include<time.h>
#include<stdlib.h>
char p;
void caishu(void)
{
int m,n;
srand(time(NULL));
m=rand()%1000+1;
printf("I havu a number between 1 and 1000.\nCan you guess my number.\nPlease type your frist guess.\n");
scanf("%d",&n);
while(n!=m){
if(n>m){
printf("Too high.Try again.\n");
scanf("%d",&n);
}
if(n<m){
printf("Too low.Try again.\n");
scanf("%d",&n);
}
}
printf("Excellent!You guessed the number!\nWould you like to play again?( y or n ):");
scanf("%c",&p);
scanf("%c",&p);/*就是这里了,总是自动读取了最后一个正确答案的回车,而不是等待输入*/
}
main()
{
caishu();
while(p=='y'){
caishu();
}
if(p=='n')
printf("Byebye");
while(p!='y'&&p!='n'){
printf("Wrong order\n");
printf("Would you play again?( y or n ):");
scanf("%c",&p);
while(p=='y'){
caishu();
}
if(p=='n')
printf("Byebye");
}
return 0;
}[/QUOTE]
不知这样是否满意,呵呵
2007-03-29 00:39
风之殇
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-3-15
收藏
得分:0 
输入的如果是字符的话,能不能再加一些语句,如果输入字符就给出提示呢?

2007-03-29 10:23
jabyshen
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-2-16
收藏
得分:0 
谢谢2位的回复  我自己最后也采用了这种方法  但感觉总是怪怪的

[此贴子已经被作者于2007-3-29 22:16:14编辑过]



2007-03-29 22:15
iwfy
Rank: 1
等 级:新手上路
威 望:2
帖 子:888
专家分:0
注 册:2007-2-23
收藏
得分:0 

英语不好还想学编程??逆天之路,不由分说!! 数学太差还想学编程??离经叛道,义无返顾!!
2007-03-29 22:24
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 

#include <conio.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
void main(void)
{
int answer[4],guess=0,a,b,times=0,i,j;
clrscr();
for(i=0;i<=3;i++)
{
randomize();
answer[i]=rand()%10;
for(j=0;j<i;j++)
{
while(answer[i]==answer[j])
{
answer[i]=rand()%10;
j=-1;
}
}
}
window(0,0,40,11);
textattr(YELLOW+(GREEN<<4));
printf("please guess\n");
while(a!=4)
{
a=0;
b=0;
times++;
do
{
window(10,0,40,21);
printf("\r%d ",times);
scanf("%d",&guess);
if(guess==0)
exit(0);
}while(guess<0||guess>9999);

for(i=3;i>-1;i--)
{
for(j=0;j<4;j++)
{
if((int)(guess/pow10(i))==answer[j])
{
if(i+j==3)
a=a+1;
else
b=b+1;
}
}
guess=guess-(int)(guess/pow10(i))*pow10(i);
}
window(20,0,40,31);
printf("\n\r %dA%dB\n",a,b);
}
}

[此贴子已经被作者于2007-3-29 23:10:07编辑过]


 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-03-29 23:08
jabyshen
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-2-16
收藏
得分:0 
谢谢楼上.

2007-03-30 20:02
kwbee
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-3-30
收藏
得分:0 

解决这个问题有很多种方法.下面是一种:注意要多加一行.
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
char p;
void caishu(void)
{
int m,n;
srand(time(NULL));
m=rand()%1000+1;
printf("I havu a number between 1 and 1000.\nCan you guess my number.\nPlease type your frist guess.\n");
scanf("%d",&n);
while(n!=m){
if(n>m){
printf("Too high.Try again.\n");
scanf("%d",&n);
}
if(n<m){
printf("Too low.Try again.\n");
scanf("%d",&n);
}
}
printf("Excellent!You guessed the number!\nWould you like to play again?( y or n ):");
scanf("%c",&p);/*就是这里了,总是自动读取了最后一个正确答案的回车,而不是等待输入*/
}
main()
{
caishu();
while(p=='y'){
caishu();
}
if(p=='n')
printf("Byebye");
while(p!='y'&&p!='n'){
printf("Wrong order\n");
printf("Would you play again?( y or n ):");
putchar(); //加上这一句接收多余的回车.
scanf("%c",&p);
while(p=='y'){
caishu();
}
if(p=='n')
printf("Byebye");
}
return 0;
}

另外也可以在相同位置加上fflush(stdin);来清空之前的标注输入输出流
当然还有其它很多方法


编程,调试,运行>>>>>>>>>>>
2007-03-30 20:21
jabyshen
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-2-16
收藏
得分:0 
谢谢楼上  我用fflush(stdin);解决了问题

2007-03-31 21:37
快速回复:一个简单的猜数字游戏的字符读取问题
数据加载中...
 
   



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

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