dt3tc 发表于 2015-1-19 20:24:00

Linux C语言

有个源代码,用途是在屏幕上显示一串数字几秒种,然后由用户凭记忆把它打出来
在windows下能用gcc(带-std=c99)编译成功并正常运行,在linux下也编译正常,但不能显示机器给出的数字
/* Program 4.12 Simple Simon */
#include <stdio.h>                     /* For input and output   */
#include <ctype.h>                     /* For toupper() function */
#include <stdbool.h>                   /* For bool, true, false*/
#include <stdlib.h>                  /* For rand() and srand() */
#include <time.h>                      /* For time() and clock() */

int main(void)
{
/* Records if another game is to be played */
char another_game = 'Y';

/* true if correct sequence entered, false otherwise */
int correct = false;

/* Number of sequences entered successfully          */
int counter = 0;

int sequence_length = 0;   /* Number of digits in a sequence      */
time_t seed = 0;             /* Seed value for random number sequence */
int number = 0;            /* Stores an input digit               */

time_t now = 0;            /* Stores current time - seed for random values*/
int time_taken = 0;      /* Time taken for game in seconds                */

/* Describe how the game is played */
printf("\nTo 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("%c", &another_game);

/* One outer loop iteration is one game */
do
{
    correct = true;         /* By default indicates correct sequence entered */
    counter = 0;            /* Initialize count of number of successful tries*/
    sequence_length = 2;    /* Initial length of a digit sequence            */
    time_taken = clock();/* Record current time at start of game       */

    /* Inner loop continues as long as sequences are entered correctly */
    while(correct)
    {
      /* On every third successful try, increase the sequence length */
      sequence_length += counter++%3 == 0;

      /* Set seed to be the number of seconds since Jan 1,1970*/
      seed = time(NULL);

      now = clock();                  /* record start time for sequence*/

      /* Generate a sequence of numbers and display the number */
      srand((unsigned int)seed);      /* Initialize the random sequence */
      for(int i = 1; i <= sequence_length; i++)
      printf("%d ", rand() % 10);    /* Output a random digit          */

      /* Wait one second */
      for( ;clock() - now < CLOCKS_PER_SEC; );

      /* Now overwrite the digit sequence */
      printf("\r");                   /* go to beginning of the line */
      for(int i = 1; i <= sequence_length; i++)
      printf("");               /* Output two spaces */

      if(counter == 1)         /* Only output message for the first try */
      printf("\nNow you enter the sequence- don't forget"
                                             " the spaces\n");
      else
      printf("\r");                /* Back to the beginning of the line */

      /* Check the input sequence of digits against the original */
      srand((unsigned int)seed);   /* Restart the random sequence    */
      for(int i = 1; i <= sequence_length; i++)
      {
      scanf("%d", &number);         /* Read an input number         */
      if(number != rand() % 10)   /* Compare against random digit */
      {
          correct = false;            /* Incorrect entry             */
          break;                      /* No need to check further... */
      }
      }
      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 game score */
    printf("\n\n Your score is %d", --counter * 100 / time_taken);

    /*fflush(stdin);*/
    getchar();

    /* Check if new game required*/
    printf("\nDo you want to play again (y/n)? ");
    scanf("%c", &another_game);

}while(toupper(another_game) == 'Y');
return 0;
}



!@R键! 发表于 2015-1-19 20:50:51

好长啊!

dt3tc 发表于 2015-1-19 22:11:23

!@R键! 发表于 2015-1-19 20:50
好长啊!

从第27到34行是一连串的printf();语句,所以出问题的几率不大。。ps:而且书上本来就是这么长

wingtree 发表于 2015-1-20 15:35:29

这个,好抽象的问题

爱琴海里的星 发表于 2015-1-20 16:41:48

顶顶~

wingtree 发表于 2015-1-21 14:42:51

都是大神呀

桃花飞舞 发表于 2015-2-8 12:17:24

zhao zhe shang bian yun xing le ,bu zuo biao shi .:call:

HB无影 发表于 2015-2-10 13:01:23

真是每一行都注释了!好习惯:lol:

mhhnjuol 发表于 2015-2-10 23:24:50

linux,没用过:sweat::sweat:
页: [1]
查看完整版本: Linux C语言