cómo obtener un número desconocido de enteros en la matriz en c

Necesito escribir un progtwig en c que obtenga enteros como entrada del usuario.

Ejemplo de entrada:

10 20 50 70

El usuario presiona Enter y luego la entrada termina.
No puedo pensar en una condición para que esto suceda. Intenté escribir:

int grades[1000]; int i=0; while(scanf("%d", &grades[i])!=EOF) { i++; } 

No está trabajando.

Leer una línea de entrada del usuario y luego analizarla es realmente el mejor enfoque como con @The Patwiggnetic Croissant

Si el código no puede predefinir un tamaño de búfer de entrada o debe analizar la línea mientras entra, luego use scanf("%d",... está bien. El código no elegante aparece al encontrar el '\n' .

 #define N 1000 int grades[N]; int i=0; for (i=0; i 

Si necesita leer una línea completa, lea una línea completa, así de simple. Si busca en Google “línea de lectura C”, lo más probable es que termine leyendo la documentación de fgets() . A continuación, busca en Google “C convertir cadena en entero”, y percibe que existe una función llamada strtol() en la biblioteca estándar de C. Armado con estas dos armas, y aplicando un poco de lógica, puedes deducir algo como esto:

 const size_t max_numbers = 1000; // however many int numbers[max_numbers]; size_t index = 0; char buf[LINE_MAX]; while (index < max_numbers && fgets(buf, sizeof buf, stdin)) { char *p = buf; char *end; while (index < max_numbers && *p && *p != '\n') { numbers[index++] = strtol(p, &end, 10); p = end; } }