程序中存在若干问题,具体如下:
本程序是数值运算,因此字符数组不适合。由上下文定义来看,sum是double类型,则数组也应该为double类型,不然会导致计算结果错误。
jisuan函数的声明与定义不一致,编译会报错,修改声明让其与函数定义一致。
shuru函数中试图使用i初始化全局变量n,但却使用了局部的同名变量n覆盖了全局变量,导致全局变量仍然为0。后面的函数都使用n作为数组长度,因此输出会错误。正确的做法,应该在shuru函数的for循环外为全局的变量n赋值为i。
输出输入提示时,将提示信息放入了循环体内,导致重复输出提示信息。应该将提示信息放到循环体外,输出一次即可。输出语句可以加上endl换行符,输出会美观些。
循环输入语句的判断逻辑也存在问题,应使用“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;
}
这叫什么bug,起跳被风女吹到了而已