我尝试使用.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());
}
答案 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;
}