• Viernes 29 de Marzo de 2024, 06:16

Autor Tema:  Un problemita con un programa  (Leído 1336 veces)

xtkcx

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Un problemita con un programa
« en: Domingo 9 de Octubre de 2011, 03:58 »
0
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: [Seleccionar]
#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");
}

sanlegas2000

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re:Un problemita con un programa
« Respuesta #1 en: Domingo 9 de Octubre de 2011, 07:59 »
0
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
  1. #include <stdio.h>
  2.  
  3. void suma();
  4. void resta();
  5. void ayuda();
  6.  
  7. int main()
  8. {
  9.         char a;
  10.         //printf("\nSelecciona A para ayuda: ");
  11.         //scanf("%c",&a);
  12.        
  13.        
  14.         while(a != 'F')
  15.         {
  16.                 printf("\nSelecciona A para ayuda: ");
  17.                 scanf("%c",&a);
  18.                 if (a == 'F')
  19.                 {
  20.                         printf("Fin del programa: \n");
  21.                         return 0;
  22.                 }
  23.                 if (a == 'S')
  24.                         suma();
  25.                 else if
  26.                         (a == 'R')
  27.                         resta();
  28.                 else if
  29.                         (a == 'A')
  30.                         ayuda();
  31.                 else
  32.                         printf("Error, ingrese nuevamente codigo: ");
  33.         scanf("%c",&a);
  34.         }
  35.        
  36. }
  37. void suma()
  38. {
  39.         float sum, num1, num2;
  40.        
  41.         printf("\n\nIngrese los dos valores: ");
  42.         scanf("%f",&num1);
  43.         printf("\nIngrese segundo valor");
  44.         scanf("%f",&num2);
  45.        
  46.         sum=num1+num2;
  47.        
  48.         printf("\nLa suma de ambos valores es: %f", sum);
  49. }
  50.  
  51. void resta()
  52. {
  53.         float res, num1, num2;
  54.        
  55.         printf("\n\nIngrese los dos valores: ");
  56.         scanf("%f",&num1);
  57.         printf("\nIngrese segundo valor");
  58.         scanf("%f",&num2);
  59.        
  60.         res=num1-num2;
  61.        
  62.         printf("\nLa suma de ambos valores es: %f ", res);
  63. }
  64.  
  65. void ayuda()
  66. {
  67.         printf("\nA continuacion se concederan las instrucciones");
  68.         printf("\n\nSi ingresa S, sera la suma de ambos valores");
  69.         printf("\nSi ingresa R sera la diferencia de ambos valores");
  70.         printf("\nSi desea finalizar programa ingrese F");
  71. }
  72.  

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re:Un problemita con un programa
« Respuesta #2 en: Domingo 9 de Octubre de 2011, 08:06 »
0
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
  1.         while( a != 'F' )
  2.         {
  3.                 printf("\nSelecciona A para ayuda: ");
  4.                 scanf("%c",a);
  5.  
  6.                 if ( a[0] == 'S' ) suma();
  7.                 else if ( a[0] == 'R' ) resta();
  8.                 else if ( a[0] == 'A' ) ayuda();
  9.                 else printf( "Error: " );
  10.                 // scanf( "%c", a ); // ya no se necesita pues se tiene al inicio del while
  11.         }
  12.  
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.
La imaginación es el límite.
Hardware & Software | Mexchip