0

我试图通过让用户在提示后输入数组的大小来确定数组的大小(因为我不知道每次测试我会有多少成绩)......

它似乎不喜欢那里的线scanf ("%c",&grades[i]);

这是整个功能:

#include <stdio.h>

 int main (void)
{
int numGrades;
char grades;
char i;
int x;


printf ("Enter The Amount Of Numbers In Your Array: ");
scanf("%i", &numGrades);/*Stores Amount Of Grades In The Array*/

for (x = 0; x < numGrades; ++x)
  {
  printf ("\nEnter the grade: ");
  scanf ("%c",&grades[i]);
  }

return 0; 
}

如何将数组大小作为参数传递,以便我可以接受任何大小的数组?(我将添加一个函数,将所有成绩按字母组合在一起)

4

2 回答 2

3

你有两个选择:

  1. 如果您的编译器支持 C99 可变长度数组,您可以在获得大小后声明该数组:

    scanf("%i", &numGrades);
    char grades[numGrades];
    
  2. 如果不是,那么您必须在堆上动态分配数组:

    scanf("%i", &numGrades);
    char *grades = malloc(numGrades * (sizeof *grades));
    
于 2013-03-07T06:34:43.990 回答
2

您声明grades为单个char,而不是数组。在您阅读后将声明移至numGradesVLA 并使其成为 VLA,如下所示:

char grades[numGrades];

或者使用动态分配:

char *grades = malloc(numGrades);

如果您选择后者,请不要忘记free()它。

于 2013-03-07T06:33:05.737 回答