我在Objective-C类中使用此代码(在Objective-C ++文件中):
+(NSString *)readString
{
string res;
std::getline(cin, res);
return [NSString stringWithCString:res.c_str() encoding:NSASCIIStringEncoding];
}
当我运行它时,我每次都得到一个零长度的字符串。从未有机会在命令行输入。没有。当我将这段代码逐字复制到main()
时,它就可以了。我在Build Settings下有ARC。我不知道它发生了什么。 OSX 10.7.4,Xcode 4.3.2。
是控制台应用程序。
答案 0 :(得分:9)
这意味着有输入等待读取输入。您可以清空输入:
cin.ignore(std::numeric_limits<std::streamsize>::max();
std::getline(cin, res);
如果发生这种情况,则意味着您没有在先前的读取中读取输入流中的所有数据。上述代码会在尝试阅读更多内容之前删除任何用户输入。
这可能意味着您要将operator>>
与std::getline()
混合以阅读用户输入。您可能应该选择一种技术并在整个应用程序中使用它(std :: getline())(您可以混合它们,您只需要更加小心并在使用运算符&gt;&gt;后删除'\ n'以确保任何后续std :: getline()不会混淆..
如果您想读取一个数字,请阅读该行,然后解析该行之外的数字:
std::getline(cin, line);
std::stringstream linestream(line);
linestream >> value;
答案 1 :(得分:2)
您可以这样做:
cin.ignore();
或使用
cin.clear();
cin.sync();
在使用getline()