C++帮忙找bug

2025-05-20 14:24:09
推荐回答(2个)
回答(1):

程序中存在若干问题,具体如下:

  1. 本程序是数值运算,因此字符数组不适合。由上下文定义来看,sum是double类型,则数组也应该为double类型,不然会导致计算结果错误。

  2. jisuan函数的声明与定义不一致,编译会报错,修改声明让其与函数定义一致。

  3. shuru函数中试图使用i初始化全局变量n,但却使用了局部的同名变量n覆盖了全局变量,导致全局变量仍然为0。后面的函数都使用n作为数组长度,因此输出会错误。正确的做法,应该在shuru函数的for循环外为全局的变量n赋值为i。

  4. 输出输入提示时,将提示信息放入了循环体内,导致重复输出提示信息。应该将提示信息放到循环体外,输出一次即可。输出语句可以加上endl换行符,输出会美观些。

  5. 循环输入语句的判断逻辑也存在问题,应使用“if(cin >> gr)”判断输入是否终止,而不是用“if(!cin)”和里面的“while(cin.get()!='\n')”判断。需调整一下,不然输入处理会有问题。

下面给出改修后的程序,以供参考:

#include

using namespace std;

void shuru(double *score, int size);

void show(double *score, int n);

void jisuan(const double *score, int n);

const int Max = 10;
int n = 0;

int main() {
    double score[Max];
    shuru(score, Max);
    show(score, n);
    jisuan(score, n);
    return 0;
}

void shuru(double *score, int size) {
    double gr;
    int i;
    cout << "Enter the grades: ";
    for (i = 0; i < size; i++) {
        if(cin >> gr){
            if(gr < 0){
                break;
            }
            score[i] = gr;
        }else{
            cout << "Bad input, input process terminated!" << endl;
            break;
        }
    }
    n = i;
}

void show(double *score, int n) {
    cout << "scores: ";
    for (int i = 0; i < n; i++){
        cout << score[i];
        if(i != n - 1){
            cout << " ";
        }else{
            cout << endl;
        }
    }
}

void jisuan(const double *score, int n) {
    double sum = 0;
    for (int i = 0; i < n; i++){
        sum += score[i];
    }
    cout << "average: " << sum / n << endl;
}

回答(2):

这叫什么bug,起跳被风女吹到了而已