problema cout's

Iniciado por pMV2ere, 2 Diciembre 2012, 19:30 PM

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

pMV2ere

buenas, no tengo ni idea de pq este programa no me devuelve los cout<<"ok"<<endl;
no tengo ni idea si es que mi codeblocks se ha bugeado o que :/

podeis provar a compilarlo y decirme si os sale algun "ok"? seria de mucha ayuda :)

pd: debeis introducir una sequencia como esta para iniciar el programa: 11 12 13 14 15 -1 12 14 -1(todo seguido)


Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

const int N=1000;
typedef int VectorC[N];

void llegirPremiats(VectorC& numeroP,VectorC& numeroL)
{
   int i=0;
   while(numeroP[i]!=-1){
       cin>>numeroP[i];
       cout<<numeroP[i]<<endl;
       i=i+1;
   }
   i=0;
           cout<<"ok1"<<endl;
   while(numeroL[i]!=-1){
       cin>>numeroL[i];
       cout<<numeroL[i]<<endl;
       i=i+1;
   }
   cout<<numeroL[4]<<"ok1"<<endl;
}
void comparar(VectorC numeroP,VectorC numeroL)
{
   int i=0,j=0;
   cout<<"ok2"<<endl;
   while(numeroP[i]!=-1){
       while(numeroL[j]!=-1){
           cout<<"ok"<<endl;
           if(numeroP[i]==numeroL[j])
               cout<<numeroP[i];
           else
               j=j+1;
       }
       j=0;
       i=i+1;
   }
   cout<<"bfddf"<<endl;
}
int main()
{
   VectorC numeroP,numeroL;
   llegirPremiats(numeroP,numeroL);
   cout<<"ok4"<<endl;
   comparar(numeroP,numeroL);

}

flony

supongo que en el bucle while(numeroP[i]!=-1){
        cin>>numeroP[i];
        cout<<numeroP[i]<<endl;
        i=i+1;
    }

la idea era que si ingresas un -1 sale del bucle?...porque no deja de cargarme datos, porque i siempre va a valer de 1 en adelante
si un problema no tiene solucion entonces no es un problema...es algo inevitable

leosansan

Cita de: pMV2ere en  2 Diciembre 2012, 19:30 PM
buenas, no tengo ni idea de pq este programa no me devuelve los cout<<"ok"<<endl;
no tengo ni idea si es que mi codeblocks se ha bugeado o que :/
podeis provar a compilarlo y decirme si os sale algun "ok"? seria de mucha ayuda :)
CitarTal como está no saldrán nunca los o.k, y el pobre Code::Blocks no tiene culpa de nada.
Fíjate que haces por ejemplo numeroP[4]=-1 y en la condición, como hay un incremento previo de i se compara numeroP[5]!=-1, y será mucha casualidad que numeroP[5] que aún no ha sido introducido valga -1 .... lo que hace que no salgas del bucle.
Con el arreglo que te dejo ya salen ok1 y ok11, pero tienes que "ajustar" la función comparar ya que te mete en un bucle infinito:
Código (cpp) [Seleccionar]
void llegirPremiats(VectorC& numeroP,VectorC& numeroL)
{
    int i=-1;
    do{
        i=i+1;
        cin>>numeroP[i];
        cout<<numeroP[i]<<endl;

    }while(numeroP[i]!=-1);
    cout<<"ok1"<<endl;
    i=-1;
    do{
        i=i+1;
        cin>>numeroL[i];
        cout<<numeroL[i]<<endl;
    }while(numeroL[i]!=-1);
    cout<<numeroL[4]<<"ok11"<<endl;system ("pause");
}

Saluditos!.

rir3760

En el caso de los contadores de los bucles se debe tratar, en lo posible, de que estos almacenen un valor útil, por ejemplo el numero de elementos leídos y almacenados.

Es mejor leer el numero en una variable auxiliar y almacenarlo en el array solo si es distinto de -1:
Código (cpp) [Seleccionar]
int i;
int aux;

// ...

for (i = 0; cin >> aux && aux != -1; i++){
   numeroP[i] = aux;
   cout << numeroP[i] << endl;
}
// El numero de valores almacenados es i


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language