我在C中有点新,我正在尝试编写一些简单的代码,为少数学生获得一些成绩并将它们存储在二维数组中。问题是它不会运行,因为没有声明数组。为什么我需要在使用之前声明一些东西,如何在不运行整个循环并声明某些值的情况下简单地声明它?
这是我现在的代码:
#include <stdio.h>
int main()
{
int students = 2, courses = 2;
int grades[students][courses];
for(int i=0; i<students; i++)
{
for(int j=0; j<courses; j++)
{
printf("Student %d, course %d grade: ", i, j);
scanf("%d", &grades[i][j]);
}
}
}
答案 0 :(得分:4)
为什么我需要在使用之前声明一些东西
因为这就是C语言的定义方式。您必须在使用它们之前声明事物,期间。在使用“它”之前,你必须告诉编译器“它”是什么。在这方面,有时候C可以相当宽容,愿意只通过“部分”声明。但无论如何,至少需要某种部分声明。
你的(已注释掉的)声明是正确的
int grades[students][courses];
请注意,为了使用非常量students
和courses
作为数组大小,您需要一个现代C编译器(C99或更高版本),它支持可变长度数组(VLA)。 “Classic”C(C89 / 90)不允许非常数阵列。
然后你必须为数组元素分配一些有意义的值。这必须使用循环来完成。
答案 1 :(得分:2)
我不确定你提出的第二个问题是什么,但看起来你的二维阵列声明正确。 int grades[students][courses];
应该为您提供一个固定大小的整数二维数组。您需要声明值以告诉编译器您实际指的是什么。
答案 2 :(得分:1)
声明允许计算机保留存储空间,以便将要保存的值放在数组中。如果您没有声明,则没有保留这些值的地方。
就像说“我想写下一些东西,为什么我要先拿一张纸?”
答案 3 :(得分:0)
声明要放置的数组
int grades[2][2];
作为你主要的第一行。 如果您想要包含更多学生或成绩,可以将大小设置为更大的大小。