Question

Je vous écris un programme pour un exercice qui va lire les données à partir d'un fichier et le format pour être lisible. Jusqu'à présent, j'ai un peu de code qui séparera un en-tête à partir des données qui va en dessous. Ici, il est:

int main() {
    ifstream in("records.txt");
    ofstream out("formatted_records.txt");
    vector<string> temp;
    vector<string> headers;
    for (int i = 0; getline(in,temp[i]); ++i) {
        static int k = -1;
        if (str_isalpha(temp[i])) {
            headers[++k] = temp[i];
            temp.erase(temp.begin() + i);
        }
        else {
            temp[i] += "," + headers[k];
        }
    }
}

(str_isalpha() est juste une fonction qui applique isalpha() à chaque caractère dans une chaîne.) Maintenant, la boucle for dans ce programme n'exécute pas, et je ne peux pas comprendre pourquoi. Quelqu'un sait-il?

EDIT: Comme suggéré, je l'ai changé à

string line;
for (int i = 0; getline(in,line); ++i) {
    temp.push_back(line);

Encore la saute pour boucle tout à fait.

Était-ce utile?

La solution

Si la boucle ne fonctionne toujours pas après avoir vérifié que vous lisez dans une référence de chaîne valide, vous devez vérifier que le flux que vous lisez à partir est valide. Le flux sera valide si le fichier n'existe pas ou si vous manquez la permission de le lire, par exemple. Lorsque le flux est pas valide, getline ne rien lu. Sa valeur de retour est le même flux, et une fois converti en bool, il évalue comme false. Vérifier l'état du cours d'eau avant de poursuivre.

ifstream in("records.txt");
if (!in.is_open()) {
  std::cerr << "Uh-oh.\n";
  return EXIT_FAILURE;
}

Autres conseils

vector<string> temp; fait un vide vecteur. Lorsque vous essayez de lire ensuite dans temp[0], c'est un comportement non défini. Vous devez passer comme deuxième argument de getline une variable string séparée, disons string foo; avant que la boucle, puis temp.push_back(foo); comme la première instruction dans le corps de la boucle.

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