Muy buenas de nuevo. Estoy haciendo un programa ( muy básico ) en el que se debe introducir un número de alumnos, luego pedir una calificación a cada uno en el intervalo [0, 10], y por último clasificar el número de aprobados, notables, etc. TODO CON ENTEROS.
De momento llevo lo siguiente:
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#define TAMANIO 10
int verificarEntrada(const char *ptrX);
int verificarEntrada(const char *ptrX)
{
for(; *ptrX != '\0'; ptrX++){
if(isdigit(*ptrX) == 0){
puts("->Entrada no permitida.");
return 0;
}
}
return 1;
}
int main(void)
{
char nAlumnos[TAMANIO];
int alumnos;
int longitud;
int x; // valor que devuelve la función verificarEntrada()
int i;
char *notas[alumnos];
int notasEnteras[alumnos];
do{
printf("Numero de alumnos: ");
fgets(nAlumnos, TAMANIO, stdin); // si introducimos 9 o más caracteres se produce OVERFLOW en el buffer
longitud = strlen(nAlumnos);
if(nAlumnos[longitud-1] == '\n'){ // si la cadena tiene una longitud menor a TAMANIO-1 evitamos la "impresión de '\n'
nAlumnos[longitud-1] = '\0';
}
x = verificarEntrada(nAlumnos);
puts("");
if(x == 1){
alumnos = atoi(nAlumnos);
}
} while(x == 0);
for (i = 0; i < alumnos; i++){
do{
notas[i] = malloc (TAMANIO * sizeof (char));
printf("Nota alumno %d : ", i + 1);
scanf("%[^\n]", notas[i]);
while(getchar() != '\n');
x = verificarEntrada(notas[i]);
if(x == 1){
int n = atoi(notas[i]);
if(n < 0 || n > 10){ // cada nota debe estar comprendida en el intervalor [0, 10]
x = 0;
}
else{
notasEnteras[i] = atoi(notas[i]);
}
}
} while(x == 0);
}
return EXIT_SUCCESS;
}
El problema es que compila pero en cuanto se abre la consola se termina el proceso.
No encuentro que puede estar mal.
Agradecería mucho indicaciones de cómo mejorar un poco el código (ya que lo veo un poco desastroso, sobre todo en la declaración de variables
)
Gracias.