有人可以帮助如何在多个函数中声明 int 吗? C

标签 c

这是我的代码:

#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/

相关文章:

c - 程序在 C 中导致 1 秒延迟,然后打印内容

c - 在 C 中包含守卫约定

c - 我是否错误地使用了 '&&'?

c++ - OpenGL:如何裁剪 2D 区域以避免带有 GlutBitmap 的文本打印出该区域?

c - 将 int 乘以 double 需要多少内存?

c - 如何使用 MongoDB C 驱动程序和 FoundationDB 文档层进行事务处理?

android - 如何在 Android 中使用没有 Xamarin 的单声道运行 C# 代码?

c - 如何在 C 中将一种类型的变量更改为另一种类型的变量?

c - R的C接口(interface)中NewEnvironment和R_NewHashedEnvironment的区别

c - 在 C 中获取 __regvar 变量的地址