Come mai sto ottenendo risultati strani con istream :: get (char *, streamsize n, char delim)?

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

  •  20-09-2019
  •  | 
  •  

Domanda

Sto leggendo in un file con un formato simile a:

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

ecc, e il codice simile al seguente:

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);

Si legge nella prima multa colonna per la maggior parte del tempo. Tuttavia, di tanto in tanto lo sscanf non riesce, e quando posso controllare ciò che è nel buffer utilizzando il debugger CodeGear vedo che ha letto in \000:00:023 per esempio. Per qualche ragione essa raccoglie un carattere nullo, \0, frontalmente. Quando guardo nel file di testo, sembra essere lo stesso formato di tutti gli altri valori di tempo che sono stati letti in modo corretto. Perché è di tanto in tanto l'aggiunta di un carattere null? E c'è un lavoro in giro?

È stato utile?

Soluzione

L'utente ha letto una riga vuota, o si sta cercando di leggere oltre la fine del file.

Il primo carattere è \0, che indica la fine della stringa.

Tutti i caratteri dopo che sono la memoria intatta.

Altri suggerimenti

provare questo e vedere ..

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');
}

molto probabilmente si dispone di una virgola finale nel file di input da qualche parte. o forse più di 14 caratteri di spazio bianco dopo l'ultimo numero su una linea.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top