Comment se fait-il que je reçois des résultats bizarres avec istream :: get (char *, streamsize n, char delim)?

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

  •  20-09-2019
  •  | 
  •  

Question

Je suis en train de lire dans un fichier avec un format similaire à:

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

etc, et un code similaire à ce qui suit:

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

Il se lit dans la première colonne très bien pour la plupart du temps. Cependant, de temps en temps l'sscanf échoue, et quand je vérifie ce qui est dans la mémoire tampon en utilisant le débogueur CodeGear je vois qu'il a lu dans \000:00:023 par exemple. Pour une raison quelconque, il recueille un caractère nul, \0, à l'avant. Quand je regarde dans le fichier texte, il semble être le même format que toutes les autres valeurs de temps qui ont été lus correctement. Pourquoi est-il en ajoutant parfois un caractère nul? Et est-il un travail autour?

Était-ce utile?

La solution

Vous avez lu une ligne vide, ou que vous essayez de lire après la fin du fichier.

Le premier caractère est \0, ce qui signifie la fin de la chaîne.

Tous les caractères qui sont après la mémoire intacte.

Autres conseils

essayer et voir ..

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

le plus probable que vous avez une virgule de fin dans votre fichier d'entrée quelque part. ou peut-être plus de 14 caractères blancs après le dernier numéro sur une ligne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top