C/Visual C - AYUDA con ejercicio de C

 
Vista:

AYUDA con ejercicio de C

Publicado por Roberto Ubieto (1 intervención) el 03/05/2007 11:49:19
Muy buenas, supongo que mi presgunta será muy simple, pero estoy aprendiendo c y aún no se muy bien como funciona esta estructura con caracteres y cadenas de caracteres.

Este es el código de un jercicio:

/*
Nombre del programa: aprobados
Programador: Roberto Ubieto Juan
Ejercicio 8 Hoja 4: Algoritmo que nos indique si una serie de notas que leemos del teclado está formada exclusivamente por aprobados. Las notas serán caracteres del conjunto {A,B,C,c,D} y detrás del último elemento habrá una z. Las calificaciones aprobadas son A, B y C.
*/

#include<stdio.h>

void main()
{
char nota;
bool encontrado;

encontrado=false;
printf("Introduce una nota:\n");
scanf("%c",¬a);

while(nota!='z')
{
if(nota=='A' || nota=='B' || nota=='C' || nota=='c' || nota=='D')
{
printf("\nIntroduce otra nota:\n");
}
else
{
printf("\nNota incorrecta.\n");
}

encontrado=(nota=='c' || nota=='D');

scanf("%c",¬a);
}

if(encontrado==true)
{
printf("Hay suspensos.\n\n");
}
else
{
printf("Todo aprobado.\n\n");
}
}

Resulta que cuando lo ejecuto e introduzco cualquier nota (una letra cualquiera) y seguidamente pulso intro, el programa entra en el while y en principio coge bien el valor de la variable nota, pero una vez llega al scanf antes de acabar el while, en vez de pedir que introduzca otra, coge como valor NULL y da otra vuelta con el consiguiente error, mostrando en pantalla "Nota incorrecta" y es en esta segunda vuelta cuando me pide que introduzca otra.

Aun no entiendo muy bien por qué y me gustaría que alguien me explicara un poco el funcionamiento, puesto que llevo horas intentando comprenderlo.

MUCHAS GRACIAS
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:AYUDA con ejercicio de C

Publicado por josema (35 intervenciones) el 03/05/2007 22:20:12
Has cometido un error muy comun en los principiantes.
Vamos a ver. El prototipo de scanf nos dice que el segundo parámetro es una referencia a la variable donde se va a dejar el resultado de la entrada.

Por tanto tus llamadas a scanf las tienes que substituir por

scanf ( "%c", ¬a );

El error lo hubieras visto antes si tuvieras la variable nota inicializada a algun valor, por ejemplo, la pero situación: nota ='Z';

es una sana costumbre inicializar siempre las variables despues de crearlas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar