2010-03-17 6 views
1

Donc, j'écris un programme qui traite de la lecture et de l'écriture dans un fichier. J'utilise la fonction getline() car certaines des lignes du fichier texte peuvent contenir plusieurs éléments. Je n'ai jamais eu de problème avec getline jusqu'à maintenant. Voici ce que j'ai.Aide C++ avec la fonction getline avec ifstream

Le fichier texte ressemble à ceci:

John Smith      // Client name 
    1234 Hollow Lane, Chicago, IL // Address 
    123-45-6789      // SSN 
    Walmart       // Employer 
    58000       // Income 
    2        // Number of accounts the client has 
    1111        // Account Number 
    2222        // Account Number 

Et le code comme ceci:

ifstream inFile("ClientInfo.txt"); 
if(inFile.fail()) 
{ 
    cout << "Problem opening file."; 
} 
else 
{ 
    string name, address, ssn, employer; 
    double income; 
    int numOfAccount; 

    getline(inFile, name); 
    getline(inFile, address); 
    // I'll stop here because I know this is where it fails. 

Quand je débogués ce code, je trouve que le nom == "John", au lieu du nom == "John Smith", et Adresse == "Smith" et ainsi de suite. Est-ce que je fais quelque chose de mal. Toute aide serait très appréciée.

+1

Ce programme compile et fonctionne comme prévu pour moi. Etes-vous sûr que vous n'aviez pas déjà quelque chose comme 'cin >> nom; cin >> adresse; 'que vous avez remplacé par' getline' et oubliez simplement d'enregistrer le fichier source et/ou recompilez le programme avant de le tester à nouveau? –

+0

WFM (travaille pour moi). J'ai collé votre code dans un fichier source, ajouté divers préfixes includes et 'std ::', collé le texte dans un fichier 'ClientInfo.txt' (suppression // des commentaires), ajouté une ligne imprimant' name' à 'std :: cout', compilé et couru. 'name 'était' John Smith' pour moi. –

+0

Pourquoi utilisez-vous le style c 'getline' au lieu de' istream :: getline'? – dmckee

Répondre

2

Le code que vous affichez devrait fonctionner sur ce fichier. Donc, quelque chose doit être différent de ce que vous pensez. Les plus coupables probables sont:

  1. Le fichier a fait un saut de ligne où vous pensez qu'il a seulement un espace
  2. Le code utilise inFile >> name où vous pensez qu'il utilise getline(inFile,name)

Peut-être vous avez changé quelque chose et J'ai oublié d'enregistrer ou de recompiler ou vous lisez un fichier différent de ce que vous pensez. Par ailleurs, à partir de vos déclarations de variables, il semble que vous envisagiez de mélanger des appels getline() avec des appels d'opérateur d'extraction comme inFile >> income. Il faut faire attention à les mélanger car l'opérateur d'extraction laisse derrière lui des espaces de fin que getline() pourrait alors lire. Il y a plus d'informations près du bas de this.