Off Topic - Ayuda con el codigo

 
Vista:
Imágen de perfil de Jeremias
Val: 11
Ha disminuido su posición en 2 puestos en Off Topic (en relación al último mes)
Gráfica de Off Topic

Ayuda con el codigo

Publicado por Jeremias (17 intervenciones) el 25/05/2021 17:52:52
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
#include <iostream>
using namespace std;
 
int main(){
 
    string nombre , egresado;
    float valorMatricula, descuento, valorFinal;
 
    cout <<"Ingrese nombre del alumno: ";
    getline(cin,nombre);
 
    cout <<"Ingrese valor de la matricula: ";
    cin >> valorMatricula;
 
    cout <<"Eres egresado de la universidad?" << endl;
    cout <<"Presiones Si o No: ";
    getline(cin, egresado);
 
    if ( egresado == "si" || egresado == "Si" || egresado == "sI" || egresado == "SI" ) {
 
        cout <<"Se te aplicara un descuento." << endl;
        descuento = valorMatricula * 0.25;
        valorFinal = valorMatricula - descuento;
 
        cout <<"Su matricula vale: " << valorFinal << endl;
 
    }else{
 
        cout <<"Su matricula vale: " << valorMatricula << endl;
    }
 
    return 0;
}

Quiero saber porque no me deja ingresar el dato de si o no, se saltea, no me marca error ni advertencias.
Muchas Gracias.
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 Alejandro Andrade

Ayuda con el codigo

Publicado por Alejandro Andrade (50 intervenciones) el 28/03/2023 23:36:19
El problema es que la función getline() deja un carácter de salto de línea en el buffer de entrada después de leer la entrada anterior con cin. Entonces, cuando intentas leer la respuesta "Si" o "No", getline() lee ese carácter de salto de línea que se dejó en el buffer de entrada por la entrada anterior en lugar de esperar una entrada del usuario.

Para solucionarlo, puedes agregar una llamada adicional a getline() antes del segundo getline() para leer el carácter de salto de línea que quedó en el buffer de entrada. Simplemente agrega una línea como esta antes de la segunda llamada getline():

1
cin.ignore();

Esto descartará el carácter de salto de línea en el buffer de entrada, y la siguiente llamada a 'getline()' esperará la entrada del usuario correctamente. Tu código corregido quedaría así:

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
#include <iostream>
using namespace std;
 
int main(){
 
    string nombre , egresado;
    float valorMatricula, descuento, valorFinal;
 
    cout <<"Ingrese nombre del alumno: ";
    getline(cin,nombre);
 
    cout <<"Ingrese valor de la matricula: ";
    cin >> valorMatricula;
 
    cin.ignore(); // Agregar esta línea para ignorar el carácter de salto de línea en el buffer de entrada.
 
    cout <<"Eres egresado de la universidad?" << endl;
    cout <<"Presiones Si o No: ";
    getline(cin, egresado);
 
    if ( egresado == "si" || egresado == "Si" || egresado == "sI" || egresado == "SI" ) {
 
        cout <<"Se te aplicara un descuento." << endl;
        descuento = valorMatricula * 0.25;
        valorFinal = valorMatricula - descuento;
 
        cout <<"Su matricula vale: " << valorFinal << endl;
 
    }else{
 
        cout <<"Su matricula vale: " << valorMatricula << endl;
    }
 
    return 0;
}

Con esta corrección, deberías poder ingresar correctamente la respuesta "Si" o "No".
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