elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema con do-while
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema con do-while  (Leído 1,343 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
problema con do-while
« 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


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: problema con do-while
« Respuesta #1 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'?


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema BlueZScanner y problema de conexión
Hacking Mobile
Kasswed 3 6,314 Último mensaje 6 Mayo 2006, 22:04 pm
por Gospel
Problema Css o problema con el sidebar
Desarrollo Web
gaboomsk8 6 3,570 Último mensaje 27 Diciembre 2011, 21:56 pm
por gaboomsk8
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines