5

我在 Objective-C 类中有这段代码(在 Objective-C++ 文件中):

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

当我运行它时,我每次都会得到一个零长度的字符串。从来没有机会在命令行输入。没有。当我将此代码逐字复制到main()中时,它可以工作。我在构建设置下打开了 ARC。我不知道发生了什么。OSX 10.7.4,Xcode 4.3.2。

一个控制台应用程序。

4

2 回答 2

9

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

cin.ignore(std::numeric_limits<std::streamsize>::max();
std::getline(cin, res);

如果发生这种情况,则意味着您没有在之前的读取中从输入流中读取所有数据。上面的代码会在尝试阅读更多内容之前丢弃任何用户输入。

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

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

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

linestream >> value;
于 2012-07-06T02:26:53.880 回答
2

你可以简单地做:

cin.ignore();

或使用

cin.clear();
cin.sync();

使用前getline()

于 2013-08-25T15:09:40.207 回答