Dev - C++ - Problemas con do while con char URGENTE

 
Vista:
sin imagen de perfil
Val: 6
Ha disminuido su posición en 6 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problemas con do while con char URGENTE

Publicado por Xiaolin Jin Lin (4 intervenciones) el 22/12/2018 17:41:43
Hola, tengo un problema con un código y no se como resolverlo, si alguien me ayuda le agradeciera mucho. En un curso de programación, nos han mandado un ejercicio para resolver, y es hacer un programa que te haga la conversión de Cº a Fº y a la inversa. Bueno he estado escribiendo escribiendo... y me quedado estancado con un problema. El problema es que se me imprime dos veces el printf del principio cuando ya se ha terminado la primera operación, es decir, ejecuto el programa, pulso el C por ejemplo, introduzco un valor, me hace la conversion a F y luego me aparece el printf 2 VECES, y quiero que solo aparezca 1 vez. He usado el fflush(stdin) en todos los lados y no me sirve. He probado de muchas formas y no funciona... alguien me ayuda? gracias.
Uso una pagina online para programar, ''onlinegdb'', y estoy programando en C.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <stdio.h>
 
float conversion (float cel)
{
  return (cel * 1.8) + 32;
}
 
float inversa (float fan)
{
  return (fan - 32) / 1.8;
 
}
 
int main ()
{
  char a;
  float c = 0;
  float f = 0;
  float tem;
 
  do
  {
        printf("\n¿En que quieres la temperatura, en 2 de Celsius, o en 1 de Fahrenheit? Si quieres salir pulse 3: ");
        scanf("%c", &a);
 
        switch (a)
        {
 
            case 'F':
            case 'f':
 
            {
            printf ("Introduzca la temperatura en Celsius: ");
            scanf ("%f", &c);
            tem = conversion(c);
            printf ("\nLa temperatura en Fahrenheit es %.2f", tem);
            break;
            }
 
            case 'C':
            case 'c':
 
            {
            printf ("Introduzca la temperatura en Fahrenheit: ");
            scanf ("%f", &f);
            tem = inversa(f);
            printf ("\nLa temperatura en Celsius es %.2f", tem);
            break;
            }
 
            case 'S':
            case 's':
            {
            printf("\nGrácias por usar el programa. ¡Hasta pronto!");
            break;
            }
 
            default:
            printf("\nOpción incorrecta, inténtalo de nuevo...");
            break;
        }
 
    }
    while (a != S);
 
  return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problemas con do while con char URGENTE

Publicado por Alfil (1444 intervenciones) el 22/12/2018 18:23:15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <stdio.h>
#include <ctype.h>     // toupper, convierte minusculas en mayusculas
 
float conversion (float cel)
{ return (cel * 1.8) + 32; }
 
float inversa (float fan)
{ return (fan - 32) / 1.8; }
 
int main ()
{
    char a;
    float c = 0.0;
    float f = 0.0;
    float tem;
 
    do {
        printf("\n¿En que quieres la temperatura?\n"
               "Celsius ( C ) o Fahrenheit ( F )\n"
               "Pulsa S para terminar\n"
               "? " );
        scanf( " %c", &a );       // el espacio en blanco delante de %c ignora los blancos iniciales
        a = toupper( a );
 
        switch (a) {
 
            case 'C':
                printf ("\nIntroduzca la temperatura en Celsius: ");
                scanf ("%f", &c);
                tem = conversion(c);
                printf ("\nLa temperatura en Fahrenheit es %.2f\n", tem);
                break;
 
            case 'F':
                printf ("\nIntroduzca la temperatura en Fahrenheit: ");
                scanf ("%f", &f);
                tem = inversa(f);
                printf ("\nLa temperatura en Celsius es %.2f\n", tem);
                break;
 
            case 'S':
                printf("\n\nGrácias por usar el programa. ¡Hasta pronto!\n\n");
                break;
 
            default:
                printf("\n\nOpción incorrecta, inténtalo de nuevo...\n");
                break;
        } // fin de switch
 
    }while (a != 'S');
 
return 0;
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 6
Ha disminuido su posición en 6 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problemas con do while con char URGENTE

Publicado por Xiaolin Jin Lin (4 intervenciones) el 22/12/2018 18:56:14
Una pregunta, ya encontré el error de mi código, el problema viene del scanf("%c", &a); (línea 22), y para solucionarlo he tenido que separar el " del %, osea quedaría así, scanf(" %c", &a); Mi pregunta es, ¿por que ocurre esto? ¿por que poniendo espacios no me repetirá el printf(); y si no pongo espacios me repite el printf();?. Espero obtener una respuesta.

Gracias. Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problemas con do while con char URGENTE

Publicado por Alfil (1444 intervenciones) el 23/12/2018 11:47:08
fflush(stdin); sólo sirve para cadenas de tipo string.

Cuando lees un numero de desde el teclado mediante scanf(“%d”, &n) el número como tal queda guardado en la variable n, y en el búfer queda el símbolo de cambio de línea ( \n ), al llegar a la instrucción scanf(“%c”, &c) recoge ese salto de línea del búfer (almacena \n en c) y pasa a la siguiente instrucción.

Para evitarlo basta escribir scanf(“ %c”, &c) que ignora los espacios en blanco iniciales, saltos de línea, etc.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar