Чтение строки с пробелами в c ++

Как я могу прочитать строку ввода (строка типа) с пробелом? Я попробовал getline, но он переходит в бесконечный цикл. Следующий мой код.

#include  #include  #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 <> 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 <> info[array_pos].name; cout<> info[array_pos].age; cout <> info[array_pos].working_years; cout <> info[array_pos].phone; cout <> info[array_pos].salary; array_pos++; } if (inp == 's') { cout <> 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 <> inp; } //end of while loop return 0; } 

«Как я могу прочитать строку ввода (строку типа) с пробелом?»

 std::string line; if (std::getline(std::cin, line)) { ... } 

Обратите внимание, что помимо проверки возвращаемого значения вызова std:getline , вы также должны избегать смешивания >> оператора с вызовами std::getline . После того, как вы решите прочитать файл по строкам, кажется, что чище и разумнее просто сделать один огромный цикл и выполнить дополнительный синтаксический анализ при использовании объекта stream stream, например:

 std::string line; while (std::getline(std::cin, line)) { if (line.empty()) continue; std::istringstream is(line); if (is >> ...) { ... } ... } 

Простейший способ прочитать строку с пробелами, не беспокоясь о пространстве имен std, выглядит следующим образом

 #include  #include  using namespace std; int main(){ string str; getline(cin,str); cout< 

Решение №1:

 char c; cin >> noskipws; // Stops all further whitespace skipping while (cin >> c) { // Reads whitespace chars now. count++; } 

Решение №2:

 char c; while (cin.get(c)) { // Always reads whitespace chars. count++; }