La lecture de la chaîne avec des espaces en c++
Comment puis-je lire l'entrée de la ligne(de type string) avec des espaces blancs? J'ai essayé getline mais il passe en boucle infinie. Voici mon code.
#include <iostream>
#include <cstring>
#define MAX 50 //size of array
//Used G++ 4.6.3 compiler
using namespace std;
int main() {
struct Manager {
string name;
int age;
int working_years;
string phone;
int salary;
}info[MAX];
char inp; //To choose options
int array_pos = 0; //Current position in array of Manager structure
string search_name; //Manager name you want to search
cout << "Press 'i' to insert manager information or 's' to search for manager information by name or 'a' to abort: ";
cin >> inp;
while(inp != 'a') {
int search_num = 0; //array position at which search result is found
int found = 0;
if (inp == 'i' || inp == 's') {
if (inp == 'i') {
int k = array_pos;
cout << "Enter the information of the manager no "<<k+1<<" is : ";
cout << "Enter the Name : ";
//infinte loop occurs
getline(info[array_pos].name, '\n');
//cin >> info[array_pos].name;
cout<<"Enter manager age : ";
cin >> info[array_pos].age;
cout << "Enter manage working years : ";
cin >> info[array_pos].working_years;
cout << "Enter manager phone no. : ";
cin >> info[array_pos].phone;
cout << "Enter manager salary : ";
cin >> info[array_pos].salary;
array_pos++;
}
if (inp == 's') {
cout << "Enter the manager name you want to search : ";
cin >> search_name;
for(int i = 0; i < array_pos; i++) {
//using str1.compare(str2) to compare manager name
if(info[i].name.compare(search_name) == 0) { //manager name found in array of structure
found = 1;
search_num = i;
cout << "Name : " << info[search_num].name << "\n";
cout << "Age: " << info[search_num].age << "\n";
cout << "Working Years: " << info[search_num].working_years << "\n";
cout << "Phone No. : " << info[search_num].phone << "\n";
cout << "Salary : " << info[search_num].salary << "\n";
} //end of if loop for comparing string
} //end of for loop for searching
if(found == 0)
cout << "No Manager by this name exist in record" << "\n";
} //end of if loop
} //end of if loop for searching or insertion
if(inp == 'a')
break;
cout << "Press 'i' to insert manager information or 's' to search for manager information by name or 'a' to abort: ";
cin >> inp;
} //end of while loop
return 0;
}
Vous obtenez une boucle infinie parce que vous n'avez pas de vérifier les erreurs (qui comprennent à la fin du fichier) lors de la lecture du fichier.
OriginalL'auteur prattom | 2013-10-20
Vous devez vous connecter pour publier un commentaire.
"Comment puis-je lire l'entrée de la ligne(de type string) avec des espaces blancs?"
Noter que mis à part la vérification de la valeur de retour de
std:getline
appel, vous devriez aussi éviter de mélanger>>
opérateur avecstd::getline
appels. Une fois que vous décidez de la lecture du fichier ligne par ligne, il semble être plus propre et plus raisonnable de faire une énorme boucle et faire l'analyse supplémentaire lors de l'utilisation chaîne objet de flux de données, par exemple:OriginalL'auteur LihO
Façon la plus simple de lire une chaîne avec des espaces, sans vous soucier de l'espace de noms std est comme suit
OriginalL'auteur Atul Rokade
Solution #1:
Solution #2:
OriginalL'auteur ytj