¿Por qué no me funciona correctamente este programa en C (do-while)?

No se que pasa no se repite el bucle y no se por qué

El programa es sencillo(poner un calificativo(suspenso, aprobado etc.) a la nota introducida por el usuario mediante if y switch case ) solo tengo el problema del bucle que al llegar al ultimo "scanf" pasa al "system("pause")" y no da opción a escribir s/n y no se repite:

#include<stdio.h>
main()

{ float nota;

char cont;

do
{

int grupo, A, B, C, D;

printf("introduzca la nota\n");

scanf("%f", &nota);

if(0<nota && nota<5) grupo='A';

if(5<=nota && nota<7) grupo='B';

if(7<=nota && nota<9) grupo='C';

if(9<=nota && nota<=10) grupo='D';

switch(grupo)

{

case 'A':

printf("SUSPENSO\n");break;

case 'B':

printf("APROBADO\n");break;

case 'C':

printf("NOTABLE\n");break;

case'D':

printf("SOBRESALIENTE\n");break;

default:

printf("nota incorrecta\n");

}

system ("pause");
printf("¿Desea repetir? S/N\n");
scanf("%c", &cont);

}

while(cont== 's'||cont== 'S');

system ("pause");

}

1 Respuesta

Respuesta
1

He realizado una serie de cambios, quizá el más importantes es que en el último scanf he cambiado "%c" por "%s", que en realidad es un poco absurdo, pero es la manera de que funcione, cuando en un programa se usa la orden switch te puede pasar de todo, ya que es una orden que lo remueve todo por culpa de sus usos continuos de break; lástima que sea tan valorada por los profesores...

#include <stdio.h>
#include <stdlib.h>
int main(){
float nota;
char cont;
do{
char grupo;
printf("introduzca la nota\n");
scanf("%f", &nota);
if(0<=nota && nota<5) grupo='A';
if(5<=nota && nota<7) grupo='B';
if(7<=nota && nota<9) grupo='C';
if(9<=nota && nota<=10) grupo='D';
switch(grupo){
case 'A':
printf("SUSPENSO\n");break;
case 'B':
printf("APROBADO\n");break;
case 'C':
printf("NOTABLE\n");break;
case'D':
printf("SOBRESALIENTE\n");break;
default:
printf("nota incorrecta\n");
}
//system ("pause");
printf("Desea repetir? S/N\n");
scanf("%s", &cont);
//cont=getch();
}
while(cont== 's'||cont== 'S');
system ("pause");
}
 Si tienes más dudas o quieres alguna aclaración coméntamelo

Muchas gracias lo estaba probando todo y no me funcionaba

Pero no entiendo del todo la razón de poner %s en lugar de %c ¿para escanear variables de tipo char se utiliza %c no es cierto?

y otra pregunta por qué pones //cont=getch(); ? no se para que sirve

<p style="text-align: left;">

Para escanear caracteres se utiliza %c cierto, pero %c solo escanea un carácter, y al haber estado usando la orden break; seguramente se haya "descuadrado" todo asique he optado por usar %s para escanear una cadena de caracteres de la cual solo se tendra en cuenta el primer caracter introducido.

//cont=getch(); no sirve para nada, puesto que está puesto como comentario; pero es la autentica manera en la que se deben escanear caracteres. Lo que sudece es q no recuerdo en qué librería estaba la funcion getch(); por eso lo he dejado como comentario.

Espero que te sirva, si sigues con dudas no dudes en comentarlo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas