Autor Tema: Error incomprendible C++, ayuda por favor.

0 Usuarios y 1 Visitante están viendo este tema.

05 Mayo, 2017, 09:35 pm
Leído 1820 veces

Sagnior

  • Junior
  • Mensajes: 39
  • Karma: +0/-0
  • Sexo: Masculino
Buenas tardes, Estoy terminando un proyecto en C++ que debo enviar antes de las 12 de la noche de hoy, el programa lee dos archivos, estudiantes y materias, cada uno ordenado, y permite recibir entradas de comandos para consultar información.
El problema lo tengo con lo que ocurre al introducir el comando "listarCreditos" que imprimirá los números de cédula de cada estudiante y al lado el total de sus créditos inscritos, (en la UCV cada materia vale una cantidad de Unidades Créditos), según mi lógica el programa debería funcionar sin problemas, pero soy nuevo en C++, y cuando introduzco el comando, en vez de hacer lo que quiero q haga el programa se paraliza, guardé la información necesaria para ese comando en dos arreglos q serán recorridos y comparados para dar como salida lo q se quiere. Revisé q los arreglos se llenan.

Puede que haya un problema al convertir string a int, pero el compilador dice q todo está perfecto. Los arreglos ya están llenos anteriormente, si necesitan q les de el codigo completo me dicen
 Aquí el código resumido :
 \textrm{

int main(){
string nmaterias,nestudiantes,comando,Generos;
   vector<string>,arregloEstudiantes, arregloMaterias;
   int i,j,
int largoE=sizeof(arregloEstudiantes);
int largoM=sizeof(arregloMaterias);
while(true){
   getline(cin,comando);

    if(comando == "listarCreditos"){// AQUI Comando que falta
        int suma=0;
        int cedula=0;
        for(j=0;j<largoE;j++){
            if(atoi(arregloEstudiantes[j].c_str())>=1000000){ //CEDULA
                int cedula=atoi(arregloEstudiantes[j].c_str());
                }
            for(i=1;i<largoM;i+2){
                if(arregloEstudiantes[j]==arregloMaterias[i-1]){
                    string resultado=arregloMaterias;
                    suma+=atoi(resultado.c_str());
                    }
                }
            if(atoi(arregloEstudiantes[j+1].c_str())>1000000){
                cout<<cedula<<" "<<suma<<endl;
                cedula=0;suma=0;
            }
        }

   }}
return 0;
}

05 Mayo, 2017, 10:12 pm
Respuesta #1

ingmarov

  • Moderador Global
  • Mensajes: 4,777
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Hola

Buenas tardes, Estoy terminando un proyecto en C++ que debo enviar antes de las 12 de la noche de hoy, el programa lee dos archivos, estudiantes y materias, cada uno ordenado, y permite recibir entradas de comandos para consultar información.
El problema lo tengo con lo que ocurre al introducir el comando "listarCreditos" que imprimirá los números de cédula de cada estudiante y al lado el total de sus créditos inscritos, (en la UCV cada materia vale una cantidad de Unidades Créditos), según mi lógica el programa debería funcionar sin problemas, pero soy nuevo en C++, y cuando introduzco el comando, en vez de hacer lo que quiero q haga el programa se paraliza, guardé la información necesaria para ese comando en dos arreglos q serán recorridos y comparados para dar como salida lo q se quiere. Revisé q los arreglos se llenan.

Puede que haya un problema al convertir string a int, pero el compilador dice q todo está perfecto. Los arreglos ya están llenos anteriormente, si necesitan q les de el codigo completo me dicen
 Aquí el código resumido :
 \textrm{

int main(){
string nmaterias,nestudiantes,comando,Generos;
   vector<string>,arregloEstudiantes, arregloMaterias;
   int i,j,
int largoE=sizeof(arregloEstudiantes);
int largoM=sizeof(arregloMaterias);
while(true){
   getline(cin,comando);

    if(comando == "listarCreditos"){// AQUI Comando que falta
        int suma=0;
        int cedula=0;
        for(j=0;j<largoE;j++){
            if(atoi(arregloEstudiantes[j].c_str())>=1000000){ //CEDULA
                int cedula=atoi(arregloEstudiantes[j].c_str());
                }
            for(i=1;i<largoM;i+2){
                if(arregloEstudiantes[j]==arregloMaterias[i-1]){
                    string resultado=arregloMaterias;
                    suma+=atoi(resultado.c_str());
                    }
                }
            if(atoi(arregloEstudiantes[j+1].c_str())>1000000){
                cout<<cedula<<" "<<suma<<endl;
                cedula=0;suma=0;
            }
        }

   }}
return 0;
}

Lo que puse en rojo ¿está bien?

No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

05 Mayo, 2017, 10:40 pm
Respuesta #2

Sagnior

  • Junior
  • Mensajes: 39
  • Karma: +0/-0
  • Sexo: Masculino
Hola, Sí, está correcto  ;D

Discupen que no había entendido el mensaje. :'(

05 Mayo, 2017, 10:49 pm
Respuesta #3

luis

  • Aprendiz
  • Mensajes: 304
  • Karma: +1/-0
  • Sexo: Masculino
Hola, Sí, está correcto  ;D

Creo que ingmarov te señaló bien el error. Escrito como está, ese for no puede terminar nunca porque i no se modifica.

saludos

luis

05 Mayo, 2017, 10:56 pm
Respuesta #4

Sagnior

  • Junior
  • Mensajes: 39
  • Karma: +0/-0
  • Sexo: Masculino
Jajajaja pedazo de error de novato :banghead: :banghead: , Gracias a ambos! :D