[英]Program works on Eclipse but not PuTTy
我有使用針對C的MinGW編譯器在Eclipse上運行的程序,但在PuTTy中卻沒有。 如果一個人使用Eclipse和MinGW運行/編譯它,那么它就可以正常工作。 但是,在PuTTy中,輸入難度后,它會直接跳到分數輸出(0 /要問的許多問題)。 我的函數調用有什么問題,可能導致它不能在所有GCC編譯器中正常工作?
/*
* 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;
}
您正在使用未初始化的變量counter, difficulty, qcounter
等。
while ((counter < 1) || (counter > 20)) {
^Not initialized before entering the loop
您的程序調用未定義的行為 。 什么事情都可能發生。 在不同的編譯器上可能會得出不同的結果。
一切正常,我看到您沒有初始化變量
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.