Es un trabajillo para el insti por si veis alguna parte inecesaria o forzada, la cosa es pone nota a cada alumno y guardar la nota de estos en un array:
Ej: El alumno 1 tiene la nota 9.
Pero al poner nota al 3r alumno me crashea, alguien sabe por que? Ni mi profe sabe que pasa no estoy de broma lol.
#include <stdio.h>
#include <stdlib.h>
int comparador(int n ){
if(n<=15 and n>0){
return n;
}else{
printf("NUMERO INCORRECTO!\n");
return 0;
}
}
int main(){
printf("Cuantos alumnos hay? MAX 15 MIN 1: ");
int num, v,i=0;
scanf("%i", &num);
v=num;
int array[v];
if(comparador(num) != 0){
for(i;i<=v;i++){
printf("Que nota ha sacado el alumno %i ?", i+1);
scanf("%i", array[i]);
}
for (i=0;i<=v;i++){
printf("El alumno %i ha sacado %i", i+1, array[i]);
}
}
}
Haces overflow.
Por culpa de scanf (&num)
No programo en C así que no sé indicarte la solución, busca en google.
Segun he visto overflow es que le metemos a la variable un valor mas alto del que puede, pero metemos como mucho 15, no deberia de dar error no?
&num no te da el valor de num. Lo que te da es la dirección de memoria en donde se guarda num.
La dirección de memoria es algo del tipo: 0x6fabcb73b484
En todo caso usa scanf("%s",num)
Cual es tu intención con scanf &sum?
No programo en C asique puede que lo que estoy diciendo no se aplique a C pero en C++ eso sería intentar sobrescribir la dirección de memoria en la que se almacena la variable por un numero que de el usuario. Lo cual no tiene sentido en este tipo de programas.
&num en scanf es poner el valor que introducimos en la direccion de memoria de num, por eso se pone &, ya entra en la sintaxi
No se puede dimensionar un array con una variable. Para eso está malloc y similares.
Si tú array tiene 15 elementos lo recorres desde 0 hasta 14, si llegas al 15 te has pasado.
Ya, pero parece que estas escribiendo en el propio puntero. No te lo puedo asegurar.
Si lo que pienso es cierto...
Prueba así a ver si no te crashea.
int i=0;
int *num=&i;
scanf("%d", num);
Simples errores de sintaxis, pero la logica esta bien
#include <stdio.h>
#include <stdlib.h>
int comparador(int n ){
if(n>0 and n<=15){
return n;
}else{
printf("NUMERO INCORRECTO!\n");
return 0;
}
}
int main(){
int num, v,i;
printf("Cuantos alumnos hay? MAX 15 MIN 1: ");
scanf("%i", &num);
v=num;
int array[v];
if(comparador(num) != 0){
for(i=0;i<v;i++){
printf("Que nota ha sacado el alumno %d?:", i+1);
scanf("%d",&array[i]);
}
for (i=0;i<v;i++){
printf("El alumno %i ha sacado %i\n",i+1, array[i]);
}
}
}
Ya he visto que has cambiado i<=v por i<v y el %d, por aprender y no volver a fallar me podrias decir por que pls?
El programa funciona perfectament ahora gracias!
Porque en C/C++ la primera posicion inicial de un arreglo/vector es 0,
Por ejemplo si declaras un arreglo de 4 elementos , este contendra elementos desde la osicion 0 a la 3 solamente, es decir las posiciones 0,1,2 y 3