¿Cómo es que estoy consiguiendo resultados extraños con istream :: get (char *, streamsize n, char delim)?

StackOverflow https://stackoverflow.com/questions/1943481

  •  20-09-2019
  •  | 
  •  

Pregunta

Estoy leyendo en un archivo con un formato similar a:

TIME, x, y, z
00:00:00.000 , 1, 2 , 3
00:00:00.001 , 2 , 3 , 4

etc, y el código similar al siguiente:

std::ifstream& istream;
char buffer[15];
double seconds, hours, mins; // initialised properly in real code

// to read in first column
istream.get(buffer, 14, ',');

int scanned = std::sscanf(buffer, "%d:%d:%lf", &hours, &mins, &seconds);

Se lee en la primera columna para bien la mayor parte del tiempo. Sin embargo, en ocasiones el sscanf falla, y cuando puedo comprobar lo que está en la memoria intermedia utilizando el depurador Codegear Veo que ha leído en \000:00:023 por ejemplo. Por alguna razón, está recogiendo un carácter nulo, \0, en la parte delantera. Cuando miro en el archivo de texto, que parece ser el mismo formato que todos los demás valores de tiempo que se leyeron correctamente. ¿Por qué es de vez en cuando añadiendo un carácter nulo? Y es que hay un trabajo alrededor?

¿Fue útil?

Solución

Usted ha leído una línea en blanco, o si está tratando de leer más allá del final del archivo.

El primer carácter es \0, lo que significa el final de la cadena.

Los caracteres después de que son la memoria intacta.

Otros consejos

probar esto y ver ..

ifstream inpfile("sample.txt");
char buffer[15];
inpfile.ignore(80, '\n');
while (!inpfile.eof())
{

    inpfile.get(buffer, 14, ',');
    int hrs, mins;
    double secs;
    hrs = mins = secs = -1;
    sscanf_s(buffer, "%d:%d:%lf", &hrs, &mins, &secs);
    cout << "hrs:" << hrs << "\t"
        << "mins:" << mins << "\t"
        << "secs:" << secs 
        << endl;
    inpfile.ignore(80, '\n');
}

más probable es que usted tiene una coma final en el archivo de entrada en alguna parte. o tal vez un máximo de 14 caracteres de espacio en blanco después del último número en una línea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top