web-dev-qa-db-fra.com

Utilisation de getline () avec une entrée de fichier en C ++

J'essaie de faire une tâche simple pour débutant en C++. J'ai un fichier texte contenant la ligne "John Smith 31". C'est tout. Je veux lire ces données en utilisant une variable ifstream. Mais je veux lire le nom "John Smith" dans une variable de chaîne, puis le nombre "31" dans une variable int distincte.

J'ai essayé d'utiliser la fonction getline, comme suit:

ifstream inFile;
string name;
int age;

inFile.open("file.txt");

getline(inFile, name); 
inFile >> age; 

cout << name << endl;
cout << age << endl;  

inFile.close();    

Le problème avec cela est qu'il sort la ligne entière "John Smith 31". Existe-t-il un moyen de dire à la fonction getline de s'arrêter après avoir obtenu le nom, puis de "redémarrer" pour récupérer le numéro? Sans manipuler le fichier d'entrée, c'est?

6
user3128869

getline , comme son nom l'indique, lisez une ligne entière, ou du moins jusqu'à un délimiteur qui peut être spécifié.

La réponse est donc "non", getline ne correspond pas à votre besoin.

Mais vous pouvez faire quelque chose comme:

inFile >> first_name >> last_name >> age;
name = first_name + " " + last_name;
7
Johan

vous devez faire comme:

getline(name, sizeofname, '\n');
strtok(name, " ");

Cela vous donnera le "joht" dans nom puis pour obtenir le prochain jeton,

temp = strtok(NULL, " ");

temp obtiendra "smith" dedans. alors vous devez utiliser la concatination de chaînes pour ajouter le temp à la fin du nom. comme:

strcat(name, temp);

(vous pouvez également ajouter de l'espace en premier, pour obtenir un espace entre les deux).

2
Zeeshan
ifstream inFile;
string name, temp;
int age;

inFile.open("file.txt");

getline(inFile, name, ' '); // use ' ' as separator, default is '/n'. Now name is "John".
getline(inFile, temp, ' '); // Now temp is "Smith"
name.append(1,' ');
name += temp;
inFile >> age; 

cout << name << endl;
cout << age << endl;  

inFile.close();    
1
SliceSort