[ Foro de C++ ]

Problemas con función cin.getline();

03-May-2021 03:32
Invitado (CassanoG)
0 Respuestas

/*
Tengo muchos problemas para hacer funcionar mi programa, soy nuevo con C++, muchas cosas las sabía hacer en C, pero no programo hace 6 años, la realidad es que volví a tomar interés hace dos días porque mi amiga necesita ayuda para exámenes en una semana... estoy haciendo este programa para tomar apellidos de alumnos y hacer un trabajo con sus promedios, pero no puedo alcanzar a revisar la funcionalidad porque lo hice de 5 maneras diferentes y siempre hay dramas con esta función cin.getline. Alguien que me pueda orientar? o que quiera sea buena onda para responder consultitas situacionales por zoom/discord/meet?
Si bien empecé a practicar por mi amiga, me volvió a interesar.
*/

#include <iostream>
#include <string.h>
#include <conio.h>
#include <stdlib.h>

using namespace std;

int reviso_apellido (char *);
int reviso_promedio (float);
int func_seguir (void);

int main ()
{
 int gente, contador=0, name_ok, prom_ok, cod_err, sigue_ok=1, FF=0, GG=0;
 float promedio=0, max_prom=0.5, min_prom=11;
 char apellido[30], mayor_prom[30], menor_prom[30], seguimos[2];

 cout << "Ingrese Cantidad de Alumnos: " << endl;
 cin >> gente;

 do {
     cout << "Ingrese Apellido:" << endl; cin.getline (apellido,30,'\n');
     cout << "Ingrese Promedio:" << endl; cin >> promedio;
     
     name_ok= reviso_apellido (apellido); prom_ok= reviso_promedio (promedio);
     
     cod_err= name_ok*10+prom_ok;
     if (cod_err==00) {cout << "// Error de los Datos //" << endl; contador--; break;}
     if (cod_err==01) {cout << "// Error en el Nombre //" << endl; contador--; break;}
     if (cod_err==10) {cout << "// Error en Promedio  //" << endl; contador--; break;}
     
     if (promedio>max_prom) {max_prom=promedio; strcpy(mayor_prom,apellido);}
     if (promedio<min_prom) {min_prom=promedio; strcpy(menor_prom,apellido);}  
   
     if (promedio>=6) GG++;
     else FF++;
     
     if (!func_seguir())
       {
         cout << "~ ~ ~ ESTATUS DE INGRESOS ~ ~ ~" << endl;
         cout << "MAYOR PROMEDIO: " << mayor_prom << " (" << max_prom << ")" << endl;
         cout << "MENOR PROMEDIO: " << menor_prom << " (" << min_prom << ")" << endl;break;
       }
       
     contador++;
       
     } while (contador<gente);

 return 0;
}

int reviso_apellido (char *cad)
{
 int i;
 int a=1;
 
 for (i=0; i<30 && a==1; i++) { if (cad[i]<'65' && cad[i]!='32' || cad[i]>'90' && cad[i]<'97' || cad[i]>'122') a=0;}
 
 return a;
}

int reviso_promedio (float num)
{
 if (num<1 || num>10) return 0;
 return 1;
}

int func_seguir (void)
{
 char opcion[2];
 
 cout << "?? Continuar con el ingreso? " << endl; cin.getline (opcion,2,'\n');
 
 if (!strcmp(opcion,"SI")) return 1;
 if (!strcmp(opcion,"NO")) return 0;
 return func_seguir();
}




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)