problema con do-while

Iniciado por m@o_614, 31 Octubre 2013, 21:01 PM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

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:

#include <stdio.h>
#include <stdlib.h>
#define TAM 10
/*
  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.
*/

int main()
{
    FILE *fd;
    int numero1,numero2,suma,continuar = 1;
    char respuesta,cad[TAM];
    if((fd = fopen("F:\\resultados\\sumas.txt","a+"))!= NULL)
    {*/
        do
        {
            printf("Dame primer numero: ");
            fgets(cad,TAM,stdin);
            sscanf(cad,"%d",&numero1);
            printf("Dame segundo numero: ");
            fgets(cad,TAM,stdin);
            sscanf(cad,"%d",&numero2);
            suma = numero1+numero2;
            printf("%d + %d = %d",numero1,numero2,suma);
            printf("\n\nDesea hacer otra suma? (S/N)\n");
            fgets(cad,TAM,stdin);
            sscanf(cad,"%c",&respuesta);
            if(respuesta == 'N')
               continuar = 0;
        }while(continuar);
    }
    else
       printf("No se pudo crear archivo\n");
    return 0;
}
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

#include <stdio.h>
#include <stdlib.h>
#define TAM 10
/*
  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.
*/

int main()
{
    FILE *fd;
    int numero1,numero2,suma,continuar = 1;
    char respuesta,cad[TAM];
    if((fd = fopen("F:\\resultados\\sumas.txt","a+"))!= NULL)
    {
        do
        {
            printf("Dame primer numero: ");
            fgets(cad,TAM,stdin);
            sscanf(cad,"%d",&numero1);
            printf("Dame segundo numero: ");
            fgets(cad,TAM,stdin);
            sscanf(cad,"%d",&numero2);
            suma = numero1+numero2;
            printf("%d + %d = %d",numero1,numero2,suma);
            do
            {
                printf("\n\nDesea hacer otra suma? (S/N)\n");
                fgets(cad,TAM,stdin);
                sscanf(cad,"%c",&respuesta);
            }while((respuesta != 'S')||(respuesta != 'N'));
            if(respuesta == 'N')
               continuar = 0;
        }while(continuar);
    }
    else
       printf("No se pudo crear archivo\n");
    return 0;
}


de antemano gracias

ivancea96

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'?