2014-02-13 65 views
0

我有這個程序在Eclipse上使用MinGW編譯器,但不在PuTTy中。 如果運行這個/使用Eclipse和MinGW編譯它,再次,它工作得很好。但是在PuTTy中,輸入難度後,它會直接跳到得分輸出(0 /無論提出多少問題)。我做了什麼錯誤的函數調用可能導致它無法正確使用所有GCC編譯器?程序在Eclipse上工作,但不是PuTTy

/* 
* quiz.c 
* 
* Created on: Feb 7, 2014 
*  Author: Paul 
*/ 
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
/* Generating random numbers: 
* Include stdlib.h 
* Include time.h 
* RAND_MAX is the largest positive (defaults to 2.14 billion) 
* the numbers generated are psuedo numbers, so it must be changed. 
* 
* Keep variable declarations at the top to squash Pendantic warnings. 
* */ 
int genQuestion(int); 
int answerQuestion(int); 
int response(int); 

int main() 
{ 
    int counter; 
    int difficulty; 
    int qcounter; 
    int numCorrect; 
    int question; 


    /* 
    * Disable buffering, because it would otherwise not display the 
    * text. How annoying. 
    */ 
    setbuf(stdout, NULL); 

    while ((counter < 1) || (counter > 20)) 
    { 
     printf("How many questions for the test (1-20)? "); 
     scanf("%d",&counter); 
     printf("\n"); 
    } 

    while ((difficulty < 1) || (difficulty > 4)) 
    { 
     printf("Select difficulty (1-4): "); 
     scanf("%d",&difficulty); 
     printf("\n"); 
    } 

    while (qcounter < counter) 
    { 
     printf("Question %d: ", qcounter+1); 
     question = genQuestion(difficulty); 
     if (answerQuestion(question)) 
     { 
      response(1); 
      numCorrect++; 
     } 
     else 
     { 
      response(0); 

      printf("The correct answer was %d\n", question); 
     } 

     qcounter++; 
    } 

    printf("Your score was %d/%d\n", numCorrect, counter); 

    return 0; 
} 

int genQuestion(int diff) 
{ 
    int gMin, n1; 
    int gMax, n2; 
    int rndOperator; 
    int ans; 

    setbuf(stdout, NULL); 
    srand(time(NULL)); 
/* Set up the difficulties for minimum and maximum ranges. 
*/ 

    if (diff == 1) 
    { 
     gMin = 1; 
     gMax = 10; 
    } 
    else if (diff == 2) 
    { 
     gMin = 1; 
     gMax = 50; 
    } 
    else if (diff >= 3) 
    { 
     gMin = 100; 
     gMax = 200; 
    } 

    if (diff == 4) 
    { 
     n1 = rand() %gMax - gMin; 
     n2 = rand() %gMax - gMin; 
    } 
    else 
    { 
     n1 = rand() %gMax + gMin; 
     n2 = rand() %gMax + gMin; 
    } 

    rndOperator = rand() %4 + 1; 

    /* 
    * Legend: 
    * 1 = + 
    * 2 = - 
    * 3 = * 
    * 4 =/
    * Thus, if we divide, make sure the denominator "n2" isn't 0. If 
    * it is, set it to 1 instead. This is our safeguard. 
    */ 

    if (rndOperator == 1) 
    { 
     printf("%d + %d = ",n1,n2); 
     ans = n1 + n2; 
    } 
    else if (rndOperator == 2) 
    { 
     printf("%d - %d = ",n1,n2); 
     ans = n1 - n2; 
    } 
    else if (rndOperator == 3) 
    { 
     printf("%d * %d = ",n1,n2); 
     ans = n1 * n2; 
    } 
    else if (rndOperator == 4) 
    { 
     if (n2 == 0) 
      n2 = 1; 

     printf("%d/%d = ",n1,n2); 
     ans = n1/n2; 
    } 
    return ans; 
} 

int answerQuestion(int answer) 
{ 
    int userAns; 

    setbuf(stdout, NULL); 
    scanf("%d",&userAns); 

    if (answer == userAns) 
     return 1; 
    else 
    { 
     return 0; 
    } 
} 

int response(int amIRight) 
{ 
    int liner; 

    setbuf(stdout, NULL); 
    srand(time(NULL)); 
    liner = rand() %3 + 1; 
    if(amIRight == 1) 
    { 
     if (liner == 1) 
      printf("Alrighty!\n"); 
     else if (liner == 2) 
      printf("Well done!\n"); 
     else 
      printf("Great work!\n"); 
    } 
    else 
    { 
     if (liner == 1) 
       printf("Sorry Charlie!\n"); 
      else if (liner == 2) 
       printf("No can do!\n"); 
      else 
       printf("Incorrect.\n"); 
    } 
    return 0; 
} 
+1

PuTTY是不是一個編譯器;它是一個終端模擬器/ SSH客戶端。我認爲你的意思是它在Eclipse下工作,但不是GCC。 –

回答

3

您正在使用您的變量counter, difficulty, qcounter etc未初始化。

while ((counter < 1) || (counter > 20)) { 
      ^Not initialized before entering the loop 

你的程序調用未定義行爲。什麼事情都可能發生。它可能會給不同的編譯器帶來不同的結果。

+1

'int liner; '。 – alk

0

應該好了工作,我看你是不是你的初始化變量

相關問題