Programación General > C/C++
Un problemita con un programa
(1/1)
xtkcx:
Hola a todos, tengo un problema con un programa que me arme hace un ratito, aclaro soy autodidacta y estoy aprendiendo este lenguaje por que me gusta el mundo de la programacion. El tema viene que cuando lo compilo y ejecuto esta todo perfecto, pero cuando pongo la opcion ayuda que en este caso representaria la clave 'A' no para de repetirme el mensaje. A continuacion les dejo el codigo
--- Código: ---#include <stdio.h>
void suma();
void resta();
void ayuda();
void main()
{
char a[2];
printf("\nSelecciona A para ayuda: ");
scanf("%c",a);
while(a[0] != 'F')
if (a[0] == 'S')
suma();
else if
(a[0] == 'R')
resta();
else if
(a[0] == 'A')
ayuda();
else
printf("Error, ingrese nuevamente codigo: ");
scanf("%c",a);
}
void suma()
{
float sum, num1, num2;
printf("\n\nIngrese los dos valores: ");
scanf("%f",&num1);
printf("\nIngrese segundo valor");
scanf("%f",&num2);
sum=num1+num2;
printf("\nLa suma de ambos valores es: %f", sum);
}
void resta()
{
float res, num1, num2;
printf("\n\nIngrese los dos valores: ");
scanf("%f",&num1);
printf("\nIngrese segundo valor");
scanf("%f",&num2);
res=num1-num2;
printf("\nLa suma de ambos valores es: %f ", res);
}
void ayuda()
{
printf("\nA continuacion se concederan las instrucciones");
printf("\n\nSi ingresa S, sera la suma de ambos valores");
printf("\nSi ingresa R sera la diferencia de ambos valores");
printf("\nSi desea finalizar programa ingrese F");
}
--- Fin del código ---
sanlegas2000:
Bueno primero no veo la necesidad de usar un arreglo de char y por eso mejor usar solo un char, y pues se te ciclaba por que no habia un caso para la F, ya lo puse espero que te sirva.
--- Código: C ---#include <stdio.h> void suma();void resta();void ayuda(); int main(){ char a; //printf("\nSelecciona A para ayuda: "); //scanf("%c",&a); while(a != 'F') { printf("\nSelecciona A para ayuda: "); scanf("%c",&a); if (a == 'F') { printf("Fin del programa: \n"); return 0; } if (a == 'S') suma(); else if (a == 'R') resta(); else if (a == 'A') ayuda(); else printf("Error, ingrese nuevamente codigo: "); scanf("%c",&a); } }void suma(){ float sum, num1, num2; printf("\n\nIngrese los dos valores: "); scanf("%f",&num1); printf("\nIngrese segundo valor"); scanf("%f",&num2); sum=num1+num2; printf("\nLa suma de ambos valores es: %f", sum);} void resta(){ float res, num1, num2; printf("\n\nIngrese los dos valores: "); scanf("%f",&num1); printf("\nIngrese segundo valor"); scanf("%f",&num2); res=num1-num2; printf("\nLa suma de ambos valores es: %f ", res);} void ayuda(){ printf("\nA continuacion se concederan las instrucciones"); printf("\n\nSi ingresa S, sera la suma de ambos valores"); printf("\nSi ingresa R sera la diferencia de ambos valores"); printf("\nSi desea finalizar programa ingrese F");}
Geo:
Tienes un error lógico, no lo notas cuando llamas a las funciones suma y resta porque en ambas detienes la ejecución para pedirle al usuario que ingrese datos (los números a sumar/restar), pero en el caso de la función ayuda, solamente imprimes y no detienes la ejecución, por eso te ocurre eso. También, para la sentencia else, imagino que quieres ejecutar las dos instrucciones: printf y scanf, pero así como lo pones solo ejecutas una en respuesta a la sentencia else, para que se ejecuten ambas instrucciones en respuesta a esta sentencia debes englobarlas entre llaves.
Debes definir claramente cómo deseas que se ejecute tu programa, una opción es que primero preguntes qué se desea, lo ejecutas y nuevamente preguntas al usuario qué hacer, así hasta que el usuario indique que desea salir, algo como esto:
--- Código: C --- while( a != 'F' ) { printf("\nSelecciona A para ayuda: "); scanf("%c",a); if ( a[0] == 'S' ) suma(); else if ( a[0] == 'R' ) resta(); else if ( a[0] == 'A' ) ayuda(); else printf( "Error: " ); // scanf( "%c", a ); // ya no se necesita pues se tiene al inicio del while } Otro detalle, ¿por qué declaras la variable a como un vector de char? con un char es suficiente. Por último, puedes considerar ejecutar las acciones cuando el usuario introduzca las letras en minúsculas, no solamente mayúsculas, para eso te puede servir la función toupper (o tolower) dentro de la biblioteca ctype.
Navegación
Ir a la versión completa