我有这个程序在Eclipse上使用MinGW编译器用于C,但在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;
}
答案 0 :(得分:3)
您正在使用未初始化的变量counter, difficulty, qcounter
等。
while ((counter < 1) || (counter > 20)) {
^Not initialized before entering the loop
您的程序会调用未定义的行为。什么事情都可能发生。它可能会在不同的编译器上给出不同的结果。
答案 1 :(得分:0)
它应该正常工作,我发现你没有初始化你的变量