Problema al leer desde la entrada estandar en c++

Tengo un problema, estoy haciendo una clase llamada sopa, y quiero crear una función que lea automáticamente una tipo de dato Sopa, que consiste en número de filas otro de columnas y y una matriz de char del tamaño filas * columnas.Se que puedo hacer esto sobrecargando el operator>> , pero lo quiero hacer desde una función. El problema que tengo es que leo bien la matriz, pero el problema es como si en el buffer hay más caracteres para leer, porque después tengo varias lecturas en el programa y no para, osea que mete automaticamente basura en las variables que utilizo. La función es esta:

void Sopa::LeerSopa(){
   std::cin>>filas;std::cin>>columnas;
   c=new unsigned char*[filas];
   for(unsigned int i=0;i<filas;i++)
      c[i]=new unsigned char[columnas];
   for(unsigned int i=0;i<filas;++i)
      for(unsigned int j=0;j<columnas;++j)
         std::cin>>c[i][j];
}


La representación interna de la clase es:
unsigned char **c;
unsigned int filas,columnas;


Y el tipo de dato que le introduzco es:
8 20
ijodfafksewlitdecima
adnugesapoiterceralo
cqdfloipmcvbdeiravep
ugualoperitimalatapa
aloitcuniptratelitap
ratonxunipapalemacat
tolietecunifelateoap
alinltascanrasanevon


Decir que lo ejecuto con un re-direccionamiento, osea : "./bin/sopa < datos_sopa.txt " (datos sopa es esto último que he puesto"

Un saludo
Prueba a inicializar la matriz antes de los bucles a ver. Yo siempre meto print por los sitios que me espero que puedan ser la causa del error para ver que los datos están bien introducidos.


Prueba a poner uno antes de meterlo en el array, por ejemplo:

char prueba;

for(unsigned int i=0;i<filas;++i)
for(unsigned int j=0;j<columnas;++j){
cin >> prueba;
cout << prueba;
c[i][j]=prueba;
}


Para comprobar que lo que le metes desde la entrada estándar está bien.

Suerte.
Eso que comentas ya lo he probado, coge bien los caracteres, lo malo es que después de la función para de coger caracteres.


Bueno creo que se porque puede ser, al redireccionar la entrada estandar a un archivo, cuando se acaba de leer el archivo la entrada estandar sigue siendo el archivo por eso coge basura,no?
2 respuestas