Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problemas con do/while y switch

Estas en el tema de Problemas con do/while y switch en el foro de C/C++ en Foros del Web. Buenos dias gente, Estoy aprendiendo C a partir de manuales y libros y me he encontrado con un problema en mi programilla. Haber si pueden ...
  #1 (permalink)  
Antiguo 30/03/2012, 04:32
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años
Puntos: 4
Pregunta Problemas con do/while y switch

Buenos dias gente,

Estoy aprendiendo C a partir de manuales y libros y me he encontrado con un problema en mi programilla. Haber si pueden ayudarme a ver mi error.

El problema creo que reside en el do/while, es una estupidez pero no consigo verla. Al seleccionar la opción A todo funciona bien, introduces unos numeros y consigues la conversión de estos pero una vez finalizada la operación te pide si deseas hacer otra operación más, si pulsas N o n sale del programa y todo perfecto pero si por lo contrario seleccionas s o S (o sea, si que quieres realizar otra operación) sale del programa también.

Otro problema que no entiendo porque sucede es que cuando escojo las opciones en las que se tienen que introducir una frase, no me deja escribir la frase y sale del programa. Por que sucede si hay un break?

A continuación les adjunto el código:

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. float FC(float c);
  5. float CF(float h);
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.     float c=0.0, h=0.0, transformer1, transformer2;
  10.     char respuesta,seleccion,frase[50],cadena[100];
  11.     int temperatura = -60, i=0,j=0, m, llargada;
  12.    
  13.     //do
  14.     //{
  15.           printf("Selecciona una de las siguientes opciones: \n\n");
  16.           printf("A. Transformar grados Farenheit a Celsius y de Celsius a Farenheit\n");
  17.           printf("B. Imprimir temperaturas de 10 en 10 des de -60 a 80\n");
  18.           printf("C. Imprimir cada palabra de una frase en una nueva línea\n");
  19.           printf("D. Imprimir cada letra de una frase en una nueva línea\n");
  20.           printf("E. Imprimir una frase de minusculas a mayusculas\n");
  21.           printf("F. Salir del programa\n\n");
  22.           printf("====================================================\n\n");
  23.          
  24.           scanf("%c",&seleccion);
  25.          
  26.           switch(seleccion)
  27.           {
  28.                 case 'a':
  29.                 case 'A':
  30.                       system("CLS");
  31.                       printf("Introduce un valor para convertir de Celsius a Farenheit\n");
  32.                       scanf("%f",&c);
  33.    
  34.                       transformer1= CF(c);
  35.                       printf("%.3f = %.3f\n",c,transformer1);
  36.    
  37.                       printf("Introduce un valor para convertir de Farenheit a Celsius\n");
  38.                       scanf("%f",&h);
  39.    
  40.                       transformer2= FC(h);
  41.                       printf("%.3f = %.3f\n",h,transformer2);
  42.                      
  43.                       getch();
  44.                       break;
  45.                      
  46.                 case 'b':
  47.                 case 'B':
  48.                      system("CLS");
  49.                      
  50.                      for(temperatura = -60; temperatura <80; temperatura=temperatura+10)
  51.                      {
  52.                         printf("%d \n", temperatura);
  53.                      }
  54.                      getch();
  55.                      break;
  56.                      
  57.                 case 'c':
  58.                 case 'C':
  59.                      system("CLS");
  60.                      
  61.                      printf("Escriu una frase: \n\n");
  62.                      
  63.                      gets(frase);
  64.    
  65.                        
  66.                      while(frase[i]!='\0')
  67.                      {
  68.                          
  69.                          if(frase[i]==' ')
  70.                          {
  71.                              printf("\n");
  72.                          }
  73.                          else
  74.                          {
  75.                              printf("%c",frase[i]);
  76.                          }
  77.                            
  78.                          i++;
  79.                      }
  80.                      getch();
  81.                      break;
  82.                      
  83.                  case 'd':
  84.                  case 'D':
  85.                       system("CLS");
  86.                       printf("Escriu una frase \n");
  87.                       gets(frase);
  88.    
  89.                          
  90.                        while(frase[j]!= '\0')
  91.                        {
  92.                              printf("%c",frase[j]);
  93.                        
  94.                              if(frase[j]=' ')
  95.                              {
  96.                                  printf("\n");
  97.                              }
  98.                              else
  99.                              {
  100.                                  printf("%c",frase[j]);
  101.                              }
  102.                                                
  103.                              j++;
  104.                        }
  105.                        getch();
  106.                        break;
  107.                        
  108.                  case 'e':
  109.                  case 'E':
  110.                       system("CLS");                  
  111.                        
  112.                       printf("Introdueix una cadena: \n");
  113.                       gets(cadena);
  114.                       llargada=strlen(cadena);
  115.                            
  116.                       for(m=0;m<llargada;m++)
  117.                      
  118.                               if((cadena[m]>='a')&&(cadena[m]<='z'))
  119.                                    cadena[m]-=32;
  120.                            
  121.                       printf("\nCadena en majuscules: \n");
  122.                       puts(cadena);
  123.                      
  124.                       printf("\n");                      
  125.                      
  126.                       getch();
  127.                       break;                    
  128.                                            
  129.                 case 'f':
  130.                 case 'F':
  131.                      printf("Usted se lo pierde !\n");
  132.                      break;
  133.    
  134.                 default:
  135.                         printf("Error: Opción incorrecta\n\n");
  136.                         printf("Aprieta una tecla correcta por favor . . .\n");
  137.                        
  138.            } /*fin de switch*/
  139.        /*    
  140.            printf("Quieres realizar otra operación? (S/N)\n");
  141.            respuesta=getch();
  142.            
  143.            if((respuesta='N')||(respuesta='n'))
  144.            {
  145.                printf("Grácias y hasta otra ocasión\n\n");
  146.                getch();
  147.                break;
  148.            }
  149.     }while((respuesta!='N') || (respuesta!='n'));
  150.     */
  151.    
  152.     system("PAUSE");
  153.     return 0;
  154. }
  155. float CF(float c)
  156.     {
  157.           float f;
  158.           f=1.8*c+32;
  159.           return f;
  160.     }
  161.          
  162.  float FC(float f)
  163.     {
  164.           float c;
  165.           c=(f-32)/1.8;
  166.           return c;
  167.     }

Grácias por su tiempo!

Saludos!

Última edición por sven_uri; 30/03/2012 a las 05:17
  #2 (permalink)  
Antiguo 30/03/2012, 08:02
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
Respuesta: Problemas con do/while y switch

la solución a esto es cambiar la condición del while

while((respuesta=='S') || (respuesta=='s'));

saludos
__________________
En programación hay mil y un formas de hacer lo mismo...
  #3 (permalink)  
Antiguo 30/03/2012, 09:00
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años
Puntos: 4
Respuesta: Problemas con do/while y switch

Haciendolo me sucede lo mismo: cuando acaba una operacion me dice que si quiero realizar otra operación y aunque le ponga si o no sale del programa :S

Saludos!
  #4 (permalink)  
Antiguo 30/03/2012, 09:03
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años
Puntos: 4
Respuesta: Problemas con do/while y switch

Vale ya lo he solucionado!

Aparte de lo que me has comentado he movido el if fuera del bucle y ya me funciona :D.

Muchas grácias fradve!
  #5 (permalink)  
Antiguo 30/03/2012, 09:04
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años
Puntos: 4
Respuesta: Problemas con do/while y switch

Como podria hacer para meter la opción C por ejemplo, en una funcion? para que asi no quedara un codigo tan complejo dentro del switch.

Código C:
Ver original
  1. system("CLS");
  2.                      
  3.                      printf("Escriu una frase: \n\n");
  4.                      
  5.                      gets(frase);
  6.    
  7.                        
  8.                      while(frase[i]!='\0')
  9.                      {
  10.                          
  11.                          if(frase[i]==' ')
  12.                          {
  13.                              printf("\n");
  14.                          }
  15.                          else
  16.                          {
  17.                              printf("%c",frase[i]);
  18.                          }
  19.                            
  20.                          i++;
  21.                      }
  22.                      getch();
  23.                      break;

Saludos!
  #6 (permalink)  
Antiguo 30/03/2012, 14:39
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problemas con do/while y switch

Código C:
Ver original
  1. void funcionC()    
  2. {
  3.    char frase[50], c;
  4.    int i = 0;
  5.    system("CLS");
  6.                      
  7.                      printf("Escriu una frase: \n\n");
  8.                      
  9.                      gets(frase);
  10.    
  11.                        
  12.                      while(frase[i]!='\0')
  13.                      {
  14.                          
  15.                          if(frase[i]==' ')
  16.                          {
  17.                              printf("\n");
  18.                          }
  19.                          else
  20.                          {
  21.                              printf("%c",frase[i]);
  22.                          }
  23.                            
  24.                          i++;
  25.                      }
  26.                      getch();
  27.     }
  28.  
  29.  
  30. case 'c':
  31. case 'C':
  32.      funcionC();
  33.      break;

Etiquetas: do-while, funcion, int, programa, switch
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:40.