从初级到C.开始成绩单申请

时间:2011-07-02 05:03:50

标签: c

#include <stdio.h>

int main(void) {
    int numStudents;
    int i = 0 ;

    printf("How many students are in your class? \n");
    scanf("%d", &numStudents);

    int grade[numStudents];

    while ( i > numStudents ){
        scanf("%d", &grade[i]);
        printf("\n");
        i++;
    }
}

我想要它做的只是获得学生人数并允许许多扫描仪获得成绩。谢谢。

3 个答案:

答案 0 :(得分:4)

while ( i > numStudents ){
    scanf("%d", &grade[i]);
    printf("\n");
    i++;
}

您的while条件是倒退的;循环体永远不会执行。

答案 1 :(得分:1)

您的代码存在两个主要问题。首先,您必须在编译时知道数组grade的大小,或者一旦知道了多少就必须分配它。

例如:

#define MAX_STUDENTS 100
    int grade[MAX_STUDENTS];

    scanf("%d", &numStudents);
    if ( numStudents > MAX_STUDENTS ) {
        printf("Sorry, cannot handle %d students, I can only handle %d\n",
               numStudents, MAX_STUDENTS);
        exit(1);
    }

或者:

    int *grade;
    grade = malloc(sizeof(int) * numStudents);
    if ( !grade ) {
        printf("Failed to allocate memory for grades\n");
        exit(1);
    }

另一个问题是你的while循环。您希望在i < numStudents时进行迭代。

答案 2 :(得分:1)

while ( i > numStudents ){
    scanf("%d", &grade[i]);
    printf("\n");
    i++;
}

i 0首先numStudents i大于或等于i > numStudents因此while ( i < numStudents ){ scanf("%d", &grade[i]); printf("\n"); i++; } 在首次检查时将为假,并且正文不会被执行。条件应该是:

malloc

此外,您应该在块的开头分配内存,或使用{{1}}分配所需大小的内存块