C学习笔记之一:循环结构、时间函数

/**********************************************
** 《Beginning C 4th Edition》 Notes codes
** Created by Goopand
** Compiler:  gcc 4.7.0
** Codes highlighter: http://pastebin.com
***********************************************/
/* Simon games : memory ability test */
#include <stdio.h>              /* for printf(),scanf() function */
#include <ctype.h>              /* for tolower() function */
#include <stdbool.h>            /* for bool type: true, false */
#include <time.h>               /* for time() function */
#include <stdlib.h>             /* for rand(),srand() function */

int main(void)
{
        char nextGame = 'Y';            /* go ahead for another game */
        bool correct = false;           /* guess correctly */
        int counter = 0;                /* number of sequences guessed correctly */
        int seq_len = 0;                /* length of sequence */
        int input_num = 0;              /* stores an input digit */
        time_t seed = 0;                /* seed value for random number sequence */
        //int i = 0;                       /* for loop variable */

        clock_t start_clock = 0;        /* record start clock time (not second) */
        int time_taken = 0;             /* Time used for game in seconds */

        printf("Here is a simon game for training memory ability .\n");
        printf("\nThe screen will show a number sequence for 1 second , ");
        printf("then the sequence will disappear. You are suggested to "
                "input the same sequence to pass the game.\n");
        printf("\nNotice this: each digit is seperated by a space. \n");
        printf("\nNow press Enter to play .. Good luck !\n");
        scanf("%c",&nextGame);  //Waiting for user's input

        do
        {
                correct = true ;
                counter = 0 ;   /* successful tries */
                seq_len = 2 ;   /* Initial length of a digit sequence */
                time_taken = clock();

                while(correct)
                {
                        /* On each third successful try, increase the squence length */
                        seq_len += (counter++ % 3 == 0);
                        //if "==" expression is true,returns 1; else returns 0

                        /* time(NULL) returns number of seconds since 1970-01-01 */
                        seed = time(NULL);

                        /* Generate and display a sequence of random numbers  */
                        srand((unsigned int)seed);
                        //initialize the seed for rand() function
                        for(int i=0; i<seq_len; i++)
                                printf("%d ",rand() % 10);
                                //Output a random digit and a space

                        /* Wait one second */
                        start_clock = clock() ;
                        //returns start clock time,clock() is a timer
                        for(;clock() - start_clock < CLOCKS_PER_SEC;) ;
                        //CLOCKS_PER_SEC is a const defined in time.h

                        /* Now overwrite the digit sequence */
                        printf("\r");
                        //control char "\r" : locator back to beginning of the line
                        for(int i=0; i<seq_len; i++)
                                printf("  ");
                                //two spaces to overwrite the sequence
                        printf("\r");

                        /* Check wether the input sequence is correct */
                        srand((unsigned int)seed);      //Restart the random sequence
                        for(int i=0; i<seq_len; i++)
                        {
                                scanf("%d",&input_num); //Read an input number
                                if(input_num != rand() % 10 )
                                {
                                        correct = false ;
                                        break;
                                }
                        }

                        printf("%s\n",correct ? "Correct !" : "Wrong !");
                }

                /* Calculate total time to play the game in seconds */
                time_taken=(clock() - time_taken) / CLOCKS_PER_SEC ;

                /* Output the total game score */
                printf("\n\nYour score is %d", --counter * 100 / time_taken);

                fflush(stdin);  //Empty the input buffer

                printf("\nDo you want to play again (y/n)? ");
                scanf("%c",&nextGame);
        } while(tolower(nextGame) == 'y');

        return 0;
}

 

 

备注:在codeblocks中编译,需要加上-std=c99选项。

 

 

转载于:https://my.oschina.net/goopand/blog/342835

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值