为什么std :: getline没有阻止?

Lin*_*ios 5 c++ macos objective-c getline objective-c++

我在Objective-C类中使用此代码(在Objective-C++文件中):

+(NSString *)readString
{
    string res;
    std::getline(cin, res);
    return [NSString stringWithCString:res.c_str() encoding:NSASCIIStringEncoding];
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我每次都得到一个零长度的字符串.从未有机会在命令行输入.没有.当我逐字复制这段代码时main(),它就可以了.我在Build Settings下有ARC.我不知道它发生了什么.OSX 10.7.4,Xcode 4.3.2.

一个控制台应用程序.

Mar*_*ork 9

这意味着有输入等待读取输入.您可以清空输入:

cin.ignore(std::numeric_limits<std::streamsize>::max();
std::getline(cin, res);
Run Code Online (Sandbox Code Playgroud)

如果发生这种情况,则意味着您没有在先前的读取中读取输入流中的所有数据.在尝试阅读更多内容之前,上述代码将删除任何用户输入.

这可能意味着你混合operator>>std::getline()读取用户输入.您可能应该选择一种技术并在整个应用程序中使用它(std :: getline())(您可以混合它们,您只需要更加小心并在使用运算符后删除'\n'以确保任何后续std :: getline()不混淆..

如果你想读取一个数字读取该行,然后解析该行之外的数字:

std::getline(cin, line);
std::stringstream  linestream(line);

linestream >> value;
Run Code Online (Sandbox Code Playgroud)