当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : C语言的一个小程序,初学者。求助(也许不该在这里问,但实在不知到问题是什么,在此论坛求助)
帖子发表于 : 2013-03-19 22:54 

注册: 2013-03-19 22:34
帖子: 10
系统: linux
送出感谢: 0 次
接收感谢: 0 次
代码:
#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 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: C语言的一个小程序,初学者。求助(也许不该在这里问,但实在不知到问题是什么,在此论坛求助)
帖子发表于 : 2013-03-19 23:02 
头像

注册: 2008-07-24 11:33
帖子: 4793
地址: 郑州
送出感谢: 4
接收感谢: 92
代码请用 [code] 或 [c] 带上原来的缩进包起来,不然没法看。


_________________
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~


页首
 用户资料  
 
3 楼 
 文章标题 : Re: C语言的一个小程序,初学者。求助(也许不该在这里问,但实在不知到问题是什么,在此论坛求助)
帖子发表于 : 2013-03-19 23:12 

注册: 2013-03-19 22:34
帖子: 10
系统: linux
送出感谢: 0 次
接收感谢: 0 次
这是个小游戏,书上的,先随机显示三个数字,然后停顿两秒,再删除那三个数字,要你输入三个数字,要是对了,就赢了,每赢三次,随机显示的数字就会增加一个,如此循环,直到你输入错误为止,然后显示你的分数,以及问你是否要继续玩。


页首
 用户资料  
 
4 楼 
 文章标题 : Re: C语言的一个小程序,初学者。求助(也许不该在这里问,但实在不知到问题是什么,在此论坛求助)
帖子发表于 : 2013-03-19 23:26 
头像

注册: 2008-07-24 11:33
帖子: 4793
地址: 郑州
送出感谢: 4
接收感谢: 92
代码:
            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: ~まだ見ぬ誰かの笑顔のために~


页首
 用户资料  
 
5 楼 
 文章标题 : Re: C语言的一个小程序,初学者。求助(也许不该在这里问,但实在不知到问题是什么,在此论坛求助)
帖子发表于 : 2013-03-19 23:33 
头像

注册: 2008-07-24 11:33
帖子: 4793
地址: 郑州
送出感谢: 4
接收感谢: 92
代码:
      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: ~まだ見ぬ誰かの笑顔のために~


页首
 用户资料  
 
6 楼 
 文章标题 : Re: C语言的一个小程序,初学者。求助(也许不该在这里问,但实在不知到问题是什么,在此论坛求助)
帖子发表于 : 2013-03-20 9:39 

注册: 2013-03-19 22:34
帖子: 10
系统: linux
送出感谢: 0 次
接收感谢: 0 次
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()没有其作用呢?真的非常感谢你


页首
 用户资料  
 
7 楼 
 文章标题 : Re: C语言的一个小程序,初学者。求助(也许不该在这里问,但实在不知到问题是什么,在此论坛求助)
帖子发表于 : 2013-03-20 9:44 
头像

注册: 2008-07-24 11:33
帖子: 4793
地址: 郑州
送出感谢: 4
接收感谢: 92
查到了这个文章,可以看看:
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: ~まだ見ぬ誰かの笑顔のために~


页首
 用户资料  
 
8 楼 
 文章标题 : Re: C语言的一个小程序,初学者。求助(也许不该在这里问,但实在不知到问题是什么,在此论坛求助)
帖子发表于 : 2013-03-20 13:46 

注册: 2013-03-19 22:34
帖子: 10
系统: linux
送出感谢: 0 次
接收感谢: 0 次
cuihao 写道:
查到了这个文章,可以看看:
http://victoryzs.blog.163.com/blog/stat ... 419622400/

大意就是,标准C中定义的fflush只用于输出流,不能用于输入流。

我明白了,不过这样一来,感觉又有更深层次的疑问了。关于输入输出流啊输入输出函数的。真的十分感谢你。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:Google [Bot] 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译