Cita de: amchacon en 10 Abril 2014, 13:57 PM
Si, cuando ya lo tengas inicializado.
Los arrays variables mejor con malloc por cierto.
Hice lo que me dijiste y el código me queda así:
Código [Seleccionar]
#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;
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);
char *notas = malloc(alumnos * sizeof (char));
int notasEnteras[alumnos];
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;
}
También puse los printf y todo va bien hasta que entra en el for, que no pasa de:
Código [Seleccionar]
scanf("%[^\n]", notas[i]);
Aquí pongo los mensajes que me deja el compilador (los que no he conseguido solucionar):
Citar
In function 'main':
57 13 [Warning] assignment makes integer from pointer without a cast [enabled by default]
60 10 [Warning] passing argument 1 of 'fgets' makes pointer from integer without a cast [enabled by default]
354 39 c:\program files (x86)\dev-cpp\mingw32\include\stdio.h expected 'char *' but argument is of type 'char'
64 10 [Warning] passing argument 1 of 'verificarEntrada' makes pointer from integer without a cast [enabled by default]
10 5 expected 'const char *' but argument is of type 'char'
67 5 [Warning] passing argument 1 of 'atoi' makes pointer from integer without a cast [enabled by default]
304 37 c:\program files (x86)\dev-cpp\mingw32\include\stdlib.h expected 'const char *' but argument is of type 'char'
73 6 [Warning] passing argument 1 of 'atoi' makes pointer from integer without a cast [enabled by default]
304 37 c:\program files (x86)\dev-cpp\mingw32\include\stdlib.h expected 'const char *' but argument is of type 'char'
No quiero la solución en código del problema si no una pista de lo que pudiese estar fallando.
Un saludo.