C语言的一个小程序,初学者。求助(也许不该在这里问,但实在不知到问题是什么,在此论坛求助)

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
bearboy1016
帖子: 10
注册时间: 2013-03-19 22:34
系统: linux

C语言的一个小程序,初学者。求助(也许不该在这里问,但实在不知到问题是什么,在此论坛求助)

#1

帖子 bearboy1016 » 2013-03-19 22:54

代码: 全选

#include<stdio.h>
#include<ctype.h>
#include<stdbool.h>
#include<stdlib.h>
#include<time.h>
int main (void)
{
	char another_game='Y';
	int i;
	int number;
	int correct=false;
	int counter=0;
	int sequence_length=0;
	time_t seed=0;
	int now=0;
	int time_taken;
	printf("\n To play Simple Simon,");
	printf("watch the screen for a sequence of digits.");
	printf("\nWatch carefully,as the digits are only displayed for a second!");
	printf("\nThe computer will remove them,and then prompt you");
	printf("to enter the same sequence.");
	printf("\nWhen you do, you must put spaces between the digits.\n");
	printf("\nGood luck!\nPress Enter to play\n");
	//scanf("%d",&another_game);
	do {
		correct=true;
		counter=0;
		sequence_length=2;
		time_taken=clock();
		printf("%d\n",time_taken);
			while(correct)
			{
				sequence_length+=(counter++)%3==0;
				seed=time(NULL);
				now=clock();
				printf("%d\n",now);
				srand((unsigned int)seed);
				for(i=1;i<=sequence_length;i++)
					printf("%d ",rand()%10);
				while(clock()-now<CLOCKS_PER_SEC*2);
				printf("\r");
				for(i=1;i<=sequence_length;i++)
					printf("  ");
				if(counter==1)
					printf("\nNow you enter the sequence-don`t forget"
							"the spaces\n");
				else
					printf("\n");
				srand((unsigned int)seed);
				for(i=1;i<=sequence_length;i++)
				{
						fflush(stdin);
						scanf(" %d",&number);
						if(number!=rand()%10)
					{
					correct=false;
					break;
					}	
				}
			printf("%s\n",correct?"correct!":"wrong!");
		}
		time_taken=(clock()-time_taken)/CLOCKS_PER_SEC;
		printf("\n%d\n",time_taken);
		printf("\n\nYour score is %d",(--counter)*100/time_taken);
		fflush(stdin);
		printf("\nDo you want to play again (y/n)\n");
		scanf("%c",&another_game);
	}while(toupper(another_game)=='Y');
	 return 0;
}
有两大问题:
1、在程序输入三个随机数字的时候,应该是先停顿两秒,然后在运行“回车”和输入“空格“,但运行的时候却是先停顿两秒,然后再输入三个随机数,随后又很快输入回车和空格,这样就看不到三个随机数的输出。
2、fflush()函数,不知为何好像没有发挥作用。
上次由 bearboy1016 在 2013-03-19 23:19,总共编辑 3 次。
头像
cuihao
帖子: 4793
注册时间: 2008-07-24 11:33
来自: 郑州
联系:

Re: C语言的一个小程序,初学者。求助(也许不该在这里问,但实在不知到问题是什么,在此论坛求助)

#2

帖子 cuihao » 2013-03-19 23:02

代码请用

代码: 全选

 或 [c] 带上原来的缩进包起来,不然没法看。
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
bearboy1016
帖子: 10
注册时间: 2013-03-19 22:34
系统: linux

Re: C语言的一个小程序,初学者。求助(也许不该在这里问,但实在不知到问题是什么,在此论坛求助)

#3

帖子 bearboy1016 » 2013-03-19 23:12

这是个小游戏,书上的,先随机显示三个数字,然后停顿两秒,再删除那三个数字,要你输入三个数字,要是对了,就赢了,每赢三次,随机显示的数字就会增加一个,如此循环,直到你输入错误为止,然后显示你的分数,以及问你是否要继续玩。
头像
cuihao
帖子: 4793
注册时间: 2008-07-24 11:33
来自: 郑州
联系:

Re: C语言的一个小程序,初学者。求助(也许不该在这里问,但实在不知到问题是什么,在此论坛求助)

#4

帖子 cuihao » 2013-03-19 23:26

代码: 全选

            for(i=1;i<=sequence_length;i++)
               printf("%d ",rand()%10);
下面加一行 fflush(stdout);
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
头像
cuihao
帖子: 4793
注册时间: 2008-07-24 11:33
来自: 郑州
联系:

Re: C语言的一个小程序,初学者。求助(也许不该在这里问,但实在不知到问题是什么,在此论坛求助)

#5

帖子 cuihao » 2013-03-19 23:33

代码: 全选

      printf("\nDo you want to play again (y/n)\n");
上面的fflush(stdin)改成

代码: 全选

      while (getchar()!='\n');
好了。
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
bearboy1016
帖子: 10
注册时间: 2013-03-19 22:34
系统: linux

Re: C语言的一个小程序,初学者。求助(也许不该在这里问,但实在不知到问题是什么,在此论坛求助)

#6

帖子 bearboy1016 » 2013-03-20 9:39

cuihao 写了:

代码: 全选

      printf("\nDo you want to play again (y/n)\n");
上面的fflush(stdin)改成

代码: 全选

      while (getchar()!='\n');
好了。
真的是太感谢了, 我想问一下,看来我得再了解一下printf()函数的运作过程。code]while(getchar()!='\n');[/code]的作用应该是截获所有的非‘\n'的字符,直到遇到一个换行字符为止,也就是我上面输入的时候,最后的那个回车。也就是说

代码: 全选

for(i=1;i<=sequence_length;i++)
				{
						fflush(stdin);
						scanf(" %d",&number);
						if(number!=rand()%10)
					{
					correct=false;
					break;
					}	
				}
里面的fflush()函数是其作用的。因为在for循环的时候,不止输入一个回车,但每次都被fflush()清理掉了。还想问一下,:-),就是为什么我下面,在输入y/n之前的fflush()没有其作用呢?真的非常感谢你
头像
cuihao
帖子: 4793
注册时间: 2008-07-24 11:33
来自: 郑州
联系:

Re: C语言的一个小程序,初学者。求助(也许不该在这里问,但实在不知到问题是什么,在此论坛求助)

#7

帖子 cuihao » 2013-03-20 9:44

查到了这个文章,可以看看:
http://victoryzs.blog.163.com/blog/stat ... 419622400/

大意就是,标准C中定义的fflush只用于输出流,不能用于输入流。
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
bearboy1016
帖子: 10
注册时间: 2013-03-19 22:34
系统: linux

Re: C语言的一个小程序,初学者。求助(也许不该在这里问,但实在不知到问题是什么,在此论坛求助)

#8

帖子 bearboy1016 » 2013-03-20 13:46

cuihao 写了:查到了这个文章,可以看看:
http://victoryzs.blog.163.com/blog/stat ... 419622400/

大意就是,标准C中定义的fflush只用于输出流,不能用于输入流。
我明白了,不过这样一来,感觉又有更深层次的疑问了。关于输入输出流啊输入输出函数的。真的十分感谢你。
回复