C ++ string.empty无法正常工作

时间:2015-04-21 02:54:34

标签: c++ string

我尝试使用.empty(),因此按下以下代码中的enter将不会执行if语句,并且do-while循环将会中断。当我尝试这段代码时,点击输入什么都不做:它只是继续缩进,直到我输入更多数据。我查了.empty(),我认为我正确使用它。为什么这段代码不起作用?

void Student::read()
{
string g = " ";

cout << "Enter the students name: ";
getline(cin, new_name);
cout << endl;

do
{
    cout << "Please enter a letter grade <E to quit>: ";
    cin >> g;

    if(!g.empty())
    {
        addGrade(g);
    }
}while(!g.empty());
}

2 个答案:

答案 0 :(得分:4)

问题与string.empty()无关,就是这一行:

cin >> g;

该操作是以空格分隔的。也就是说,它跳过所有前导空格,然后一旦它开始消耗非空白字符,它就会在下一个空白处停止,如果找到的话。因此,您可以整天按Enter键,它将被忽略,因为按Enter会导致换行符('\n'),这是空格。

如果您想要面向行的输入,请使用getline代替operator>>

getline(cin, g);

答案 1 :(得分:0)

std :; string:empty()正在按预期工作。正如本杰明指出的那样,如果你使用getline(cin, g);代替cin>>g,你可以达到预期目标:

int main()
{
string g = " ";
std::string new_name;
cout << "Enter the students name: ";
getline(cin, new_name);
cout << endl;

do
{
    cout << "Please enter a letter grade <E to quit>: ";
    getline(cin, g);

    if(!g.empty())
    {
        std::cout<<"here";
        //addGrade(g);
    }
}while(!g.empty());

return 0;
}