C – Declarar una matriz con un valor indefinido

Estoy tratando de determinar el tamaño de una matriz haciendo que el usuario ingrese el tamaño de la matriz después de que se me solicite (porque no sé cuántas calificaciones tendré por examen)

No parece que le guste la línea donde scanf ("%c",&grades[i]);

Aquí está toda la función:

 #include  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; } 

¿Cómo puedo pasar el tamaño de la matriz como un parámetro para que pueda aceptar una matriz de cualquier tamaño? (Agregaré una función que tomará todas las calificaciones y las combinará por letra)

Tienes dos opciones:

  1. Si su comstackdor admite matrices de longitud variable C99, puede declarar la matriz después de obtener el tamaño:

     scanf("%i", &numGrades); char grades[numGrades]; 
  2. Si no, entonces tiene que asignar dinámicamente la matriz en el montón:

     scanf("%i", &numGrades); char *grades = malloc(numGrades * (sizeof *grades)); 

Declaraste las grades como un solo char , no como una matriz. Mueva la statement a después de leer en numGrades y numGrades en un VLA, como este:

 char grades[numGrades]; 

O utilice la asignación dinámica:

 char *grades = malloc(numGrades); 

Si elige este último, no olvide free() .