从控制台读取一行

时间:2014-03-10 09:22:21

标签: c++ cin getline

我正在读几个字符串,如姓名,学号和成绩,我做的前三个如下:

 cout<<"Enter the student's first name: "<<endl;
            string name;
            cin>>name;
            cout<<"Enter the student's last name: "<<endl;
            string surname;
            cin>>surname;
            cout<<"Enter the student's unique student number: "<<endl;
            string studentNo;
            cin>>studentNo;

如何以下列方式输入成绩:“90 78 65 33 22”并且我希望将整个成绩线读入字符串变量。所有这些字符串都用于构造学生对象。

我如何实现这一点,我尝试使用getline(),但这不起作用。

我的尝试:

 int main(){

cout<<"Enter the student's first name: "<<endl;
                string name;
                cin>>name;
                cout<<"Enter the student's last name: "<<endl;
                string surname;
                cin>>surname;
                cout<<"Enter the student's unique student number: "<<endl;
                string studentNo;
                cin>>studentNo;
                string classRcd;
               std::getline(cin , classRcd);
               db.add_student( name , surname , studentNo , classRcd); 
    /*Creates a student object and add it to a list in db which is of type database*/
               clear();  //clears the screen in a while loop
  return 0;
}

3 个答案:

答案 0 :(得分:4)

std::string line;
std::getline( std::cin, line );

还有另一个getline()是流的成员函数;那通常不是你想要的。

答案 1 :(得分:2)

我建议使用getline()。它可以通过以下方式完成:

#include <iostream>
#include <string>
using namespace std;

int main() 
{
  cout << "Enter grades : ";
  string grades;
  getline(cin, grades);
  cout << "Grades are : " << grades << endl;
  return 0;
}

答案 2 :(得分:2)

cin>>studentNo之后,您在流中仍然有一个新行,它会为classRcd提供一个空字符串。

您可以在getline()之后添加另一个cin>>studentNo来电并单独留下结果,或者通过std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

忽略新行来解决此问题