Reading a string with spaces in C ++

How can I read an input line (type string) with a space? I tried getline, but it goes into an infinite loop. Below is my 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;
}
+4
source share
3 answers

"How can I read an input line (type line) with a space?"

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

Please note that in addition to checking the return value of the call, std:getlineyou should also avoid biasing the agent >>with the calls std::getline. After you decide to read the file line by line, it seems that it is cleaner and more reasonable to just make one huge loop and perform additional parsing when using a string stream object, for example:

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

, std,

#include <iostream>
#include <string>
using namespace std;
int main(){
    string str;
    getline(cin,str);
    cout<<str;
    return 0;
}
+4

Solution No. 1:

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

Decision number 2:

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

All Articles