Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: m@o_614 en 31 Octubre 2013, 21:01 pm



Título: problema con do-while
Publicado por: m@o_614 en 31 Octubre 2013, 21:01 pm
Saludos

tengo que crear un programa que pida al usuario pares de números enteros y escriba su suma (con el formato "20 + 3 = 23")en pantalla y en un fichero llamado "sumas.txt", que se encontrará en un subdirectorio llamado "resultados".
  Cada vez que se ejecute el programa deberá añadir los nuevos resultados a continuación de los resultados anteriores

y el codigo es el siguiente y compila correctamente:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define TAM 10
  4. /*
  5.   Crear un programa que pida al usuario pares de números enteros y escriba su suma (con el formato "20 + 3 = 23")
  6.   en pantalla y en un fichero llamado "sumas.txt", que se encontrará en un subdirectorio llamado "resultados".
  7.   Cada vez que se ejecute el programa deberá añadir los nuevos resultados a continuación de los resultados anteriores.
  8. */
  9.  
  10. int main()
  11. {
  12.    FILE *fd;
  13.    int numero1,numero2,suma,continuar = 1;
  14.    char respuesta,cad[TAM];
  15.    if((fd = fopen("F:\\resultados\\sumas.txt","a+"))!= NULL)
  16.    {*/
  17.        do
  18.        {
  19.            printf("Dame primer numero: ");
  20.            fgets(cad,TAM,stdin);
  21.            sscanf(cad,"%d",&numero1);
  22.            printf("Dame segundo numero: ");
  23.            fgets(cad,TAM,stdin);
  24.            sscanf(cad,"%d",&numero2);
  25.            suma = numero1+numero2;
  26.            printf("%d + %d = %d",numero1,numero2,suma);
  27.            printf("\n\nDesea hacer otra suma? (S/N)\n");
  28.            fgets(cad,TAM,stdin);
  29.            sscanf(cad,"%c",&respuesta);
  30.            if(respuesta == 'N')
  31.               continuar = 0;
  32.        }while(continuar);
  33.    }
  34.    else
  35.       printf("No se pudo crear archivo\n");
  36.    return 0;
  37. }
  38.  
el problema es que si a la hora de hacerme la pregunta Desea hacer otra suma, yo quiero validar que la respuesta sea solamente o S o N, y si la respuesta es otro caracter que haga un while preguntandome si quiero otra suma hasta que el caracter sea valido, para esto le hice la siguiente modificacion al codigo pero el dowhile interior nunca se sale y no entiendo por que

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define TAM 10
  4. /*
  5.   Crear un programa que pida al usuario pares de números enteros y escriba su suma (con el formato "20 + 3 = 23")
  6.   en pantalla y en un fichero llamado "sumas.txt", que se encontrará en un subdirectorio llamado "resultados".
  7.   Cada vez que se ejecute el programa deberá añadir los nuevos resultados a continuación de los resultados anteriores.
  8. */
  9.  
  10. int main()
  11. {
  12.    FILE *fd;
  13.    int numero1,numero2,suma,continuar = 1;
  14.    char respuesta,cad[TAM];
  15.    if((fd = fopen("F:\\resultados\\sumas.txt","a+"))!= NULL)
  16.    {
  17.        do
  18.        {
  19.            printf("Dame primer numero: ");
  20.            fgets(cad,TAM,stdin);
  21.            sscanf(cad,"%d",&numero1);
  22.            printf("Dame segundo numero: ");
  23.            fgets(cad,TAM,stdin);
  24.            sscanf(cad,"%d",&numero2);
  25.            suma = numero1+numero2;
  26.            printf("%d + %d = %d",numero1,numero2,suma);
  27.            do
  28.            {
  29.                printf("\n\nDesea hacer otra suma? (S/N)\n");
  30.                fgets(cad,TAM,stdin);
  31.                sscanf(cad,"%c",&respuesta);
  32.            }while((respuesta != 'S')||(respuesta != 'N'));
  33.            if(respuesta == 'N')
  34.               continuar = 0;
  35.        }while(continuar);
  36.    }
  37.    else
  38.       printf("No se pudo crear archivo\n");
  39.    return 0;
  40. }
  41.  

de antemano gracias


Título: Re: problema con do-while
Publicado por: ivancea96 en 31 Octubre 2013, 23:33 pm
La condición del Do-While está mal planteada, es todo.

Seguirá con el bucle mientras "(respuesta != 'S')||(respuesta != 'N')" sea falso.

Piensa algo: pides que sea diferente de S o de N. S es diferente de N, por tanto, seguirá en el bucle. N es diferente de S, por tanto, seguirá en el bucle.

La corrección sería: "(respuesta != 'S')&&(respuesta != 'N')".

El "AND" inplica que tiene que ser diferente de N y diferente de S a la vez. 'S' : la primera condición se cumpliría, pero la segunda no. Por tanto, saldría del bucle.

Supongo que es mucha explicación para un simple despiste jaja. Cuando sea así, tú mismo comprueba la condición. Ponte ejemplos si es necesario. "¿Qué pasaría si "respuesta" fuera igual a 'N'?