这是我的代码:
#include <stdio.h>
double CalculateFinalScore(int assignment[], int midterm[], int finalExam[], double scoreSum[], char gradeAchieved[])
{
int i = 0;
for (i = 0; i < NUM_SCORES; ++i)
{
scoreSum[i] = (assignment[i] * 0.2) + (midterm[i] * 0.3) + (finalExam[i] * 0.5);
}
}
char grade(int assignment[], int midterm[], int finalExam[], double scoreSum[], char gradeAchieved[]){
char A = 'A';
char B = 'B';
char C = 'C';
char D = 'D';
char E = 'E';
int j = 0;
for (j = 0; j < NUM_SCORES; ++j){
if ((CalculateFinalScore(assignment[], midterm[], finalExam[], scoreSum[], gradeAchieved[]) >= 85 ) {
gradeAchieved[j] = A;
}
else if ((CalculateFinalScore(assignment[], midterm[], finalExam[], scoreSum[], gradeAchieved[]) >= 75) && (CalculateFinalScore(assignment[], midterm[], finalExam[], scoreSum[], gradeAchieved[]) < 85) ){
gradeAchieved[j] = B;
}
else if ((CalculateFinalScore(assignment[], midterm[], finalExam[], scoreSum[], gradeAchieved[]) >= 60) && (CalculateFinalScore(assignment[], midterm[], finalExam[], scoreSum[], gradeAchieved[]) < 75) ){
gradeAchieved[j] = C;
}
else if ((CalculateFinalScore(assignment[], midterm[], finalExam[], scoreSum[], gradeAchieved[]) >= 45) && (CalculateFinalScore(assignment[], midterm[], finalExam[], scoreSum[], gradeAchieved[]) < 60) ){
gradeAchieved[j] = D;
}
else if ((CalculateFinalScore(assignment[], midterm[], finalExam[], scoreSum[], gradeAchieved[]) >= 0) && (CalculateFinalScore(assignment[], midterm[], finalExam[], scoreSum[], gradeAchieved[]) < 45) ){
gradeAchieved[j] = E;
}
}
}
int main(void)
{
int NUM_SCORES;
char finalGrade[NUM_SCORES];
double testScores[NUM_SCORES];
int i = 0;
int x[NUM_SCORES];
int y[NUM_SCORES];
int z[NUM_SCORES];
// Prompt user to enter test scores
printf("Input number of students: ");
scanf("%d", &NUM_SCORES);
for (i = 0; i < NUM_SCORES; ++i)
{
printf("Input student %d assignment score: ", (i+1));
scanf("%d", &(x[i]));
printf("Input student %d midterm score: ", (i+1));
scanf("%d", &(y[i]));
printf("Input student %d final exam score: ", (i+1));
scanf("%d", &(z[i]));
printf("\n");
}
printf("\n");
// Call function to calculate final score
CalculateFinalScore(x, y, z, testScores, finalGrade);
for (i = 0; i < NUM_SCORES; ++i)
{
printf("Final student %d test score: ", (i+1));
printf("%lf\n", testScores[i]);
printf("Final student %d test score: ", (i+1));
printf("%lf\n", finalGrade[i]);
}
return 0;
}
}
所以基本上,与我的代码不同,其中 NUM_SCORES 已经用 4 确定。相反,我想输入 NUM_SCORES 值,这样我就可以轻松确定它的值,但每次我这样做时,总会出现一个错误,即我的 NUM_SCORES 未声明。哦,我也遇到了这些错误
main.c: In function ‘CalculateFinalScore’:
main.c:9:21: error: ‘NUM_SCORES’ undeclared (first use in this function)
for (i = 0; i < NUM_SCORES; ++i)
^~~~~~~~~~
main.c:9:21: note: each undeclared identifier is reported only once for each function it appears in
main.c: In function ‘grade’:
main.c:24:21: error: ‘NUM_SCORES’ undeclared (first use in this function)
for (j = 0; j < NUM_SCORES; ++j){
^~~~~~~~~~
main.c:26:41: error: expected expression before ‘]’ token
if ((CalculateFinalScore(assignment[], midterm[], finalExam[], scoreSum[], gradeAchieved[]) >= 85 ) {
^
main.c:26:105: error: expected ‘)’ before ‘{’ token
if ((CalculateFinalScore(assignment[], midterm[], finalExam[], scoreSum[], gradeAchieved[]) >= 85 ) {
^
main.c:41:5: error: expected expression before ‘}’ token
}
^
main.c: In function ‘main’:
main.c:81:19: warning: format ‘%lf’ expects argument of type ‘double’, but argument 2 has type ‘int’ [-Wformat=]
printf("%lf\n", finalGrade[i]);
^
有人可以帮我解决这个问题吗?
最佳答案
您不能使用变量维度声明数组(就像在您的 main 中一样)。
因此,最简单的方法是假设常量 MAX_SCORES
,它始终大于 NUM_SCORES
,并使用它声明数组。
为了确保您的 NUM_SCORES
在所有函数中都可见,请使用全局静态变量。
此外,您应该仅通过数组名称将数组作为指针传递给函数,而不使用 [](如在 c# 中;))。
#include <stdio.h>
// define below to maximum value, what you expected
#define MAX_SCORES 255
// declare global variable
static int NUM_SCORES = 0; // this is good practice to initialize global variables
double CalculateFinalScore(int *assignment, int *midterm, int *finalExam, double *scoreSum, char *gradeAchieved)
{
// your function body
}
char grade(int *assignment, int *midterm, int *finalExam, double *scoreSum, char *gradeAchieved)
{
// your function body
}
int main(void)
{
// int NUM_SCORES; <- remove this!
char finalGrade[MAX_SCORES];
double testScores[MAX_SCORES];
int i = 0;
int x[MAX_SCORES];
int y[MAX_SCORES];
int z[MAX_SCORES];
// Prompt user to enter test scores
printf("Input number of students: ");
scanf("%d", &NUM_SCORES);
// check NUM_SCORES is less than MAX_SCORES
if (NUM_SCORES >= MAX_SCORES) {
printf("\nNumber too big! Should be less than: %d\n", MAX_SCORES);
return 0;
}
// the rest of main() body
}
最后,仅使用大写字母命名变量并不是一个好习惯 - 这种命名是使用 #define
指令定义的常量的“保留”。
如果您想表明它是全局变量,只需在名称开头添加下划线('_'),例如 _numScores
。
关于有人可以帮助如何在多个函数中声明 int 吗? C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59419143/