以前的工作变量在 C 中不再工作

问题描述 投票:0回答:1

我对我的代码做了一些更改,因此它会随机给出加法、减法、乘法、除法(在循环遍历每个之前)。但由于某种原因,以前的工作变量(问题、错误答案、总问题、正确答案)现在显示为未定义。这是什么原因造成的?我该如何解决?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int addition(void){

    int number1, number2, addAnswer, response;
    srand(time(NULL));
    
    number1 = rand() % 12;
    number2 = rand() % 12;
    
    addAnswer = (number1 + number2);
    printf("%d + %d = ?\n", number1, number2);
    scanf("%d", &response);
    
        if (response == addAnswer){
            return 1;
        }
        else{
            return 0;
        }
}

int subtraction(void){

    int number1, number2, subAnswer, response;
    srand(time(NULL));
    
    number1 = rand() % 12;
    number2 = rand() % 12;
    
    subAnswer = (number1 - number2);
    printf("%d - %d = ?\n", number1, number2);
    scanf("%d", &response);
    
        if (response == subAnswer){
            return 1;
            
        }
        
        else{
            return 0;
        }
    

}

int multiplication(void){

    int number1, number2, multAnswer, response;
    srand(time(NULL));
    
    number1 = rand() % 12;
    number2 = rand() % 12;
    
    multAnswer = (number1 * number2);
    printf("%d * %d = ?\n", number1, number2);
    scanf("%d", &response);
    
        if (response == multAnswer){
            return 1;
            
        }
        
        else{
            return 0;
        }
    

}

int division(void){

    int number1, number2, divAnswer, response;
    srand(time(NULL));
    
    number1 = rand() % 12 + 1;
    number2 = rand() % 12 + 1;
    
    divAnswer = (number1 / number2);
    printf("%d / %d = ?\n", number1, number2);
    scanf("%d", &response);
    
        if (response == divAnswer){
            return 1;
            
        }
        
        else{
            return 0;
        }
}

int main(void) {
    int response, int question = 0, correctAnswers = 0, totalQuestions = 0, wrongAnswers = 0;
    response = 0;
    srand(time(NULL));
    while (response != -1111) {
        
        if (question == 0){
            
            response = addition();
            
        } else if (question == 1){
        
            response = subtraction();
        
        }else if (question == 2){
    
            response = multiplication();
    
        }else {
            
            response = division();
            
        }
        
        if (response == 0){
            wrongAnswers++;
            totalQuestions++;

        }
        
        if (response == 1){
            correctAnswers++;
            totalQuestions++;
        }
    }
    wrongAnswers = (totalQuestions - correctAnswers);
    printf("Out of %d questions, you got %d right and %d wrong.\n", totalQuestions, correctAnswers, wrongAnswers);
    
    return 0;
  }
        
c random undefined
1个回答
0
投票

在测试您的代码时,由于整数列表中存在无关的“int”声明,我立即收到编译器错误。

int response, int question = 0, correctAnswers = 0, totalQuestions = 0, wrongAnswers = 0;

第二个“int”需要省略。

int response, question = 0, correctAnswers = 0, totalQuestions = 0, wrongAnswers = 0;

然后,我就可以编译程序了。

接下来,在测试程序时,我注意到两个问题。首先,测试了响应“-1111”的程序是否结束;然而,各种测试函数只会返回“0”或“1”值,这意味着即使输入“-1111”答案,程序也不会正常结束。因此,为了解决这个问题,在每个函数中添加了一个小测试块,以返回值“-1111”而不是“0”或“1”,以便正常的程序结束。

scanf("%d", &response);

if (response == -1111)
    return response;

另一个问题是“question”变量被初始化为“0”值,因此只会进行加法测试。因此,为了允许进行其他操作测试,在每次迭代期间都会导出从“0”到“3”的随机值。

int main(void)
{
    int response, question = 0, correctAnswers = 0, totalQuestions = 0, wrongAnswers = 0;
    response = 0;
    srand(time(NULL));
    while (response != -1111)
    {
        question = rand() % 3;  /* Otherwise, only addition questions appear */

通过这些重构,程序的测试运行就完成了。

craig@Vera:~/C_Programs/Console/RandomOperations/bin/Release$ ./RandomOperations 
7 - 8 = ?
-1
6 + 1 = ?
7
10 + 9 = ?
19
6 * 9 = ?
54
1 * 10 = ?
22
6 * 0 = ?
0
11 - 6 = ?
5
2 + 0 = ?
-1111
Out of 7 questions, you got 6 right and 1 wrong.

这里最大的收获是检查编译器警告和/或错误以查明代码中的问题。在使用函数返回信息和循环条件时参考教程文献也是明智之举。

© www.soinside.com 2019 - 2024. All rights reserved.