5

Objective-C クラス (Objective-C++ ファイル) にこのコードがあります。

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

実行すると、毎回、長さゼロの文字列が返されます。コマンドラインで入力する機会が与えられたことはありません。何もない。このコードを逐語的に にコピーするmain()と、機能します。Build Settings で ARC をオンにしています。何が起こっているのかわかりません。OS X 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()おそらく 1 つの手法を選択し、アプリケーション全体で (std::getline()) を使用する必要があります (それらを混在させることができます。より注意して、operator>> を使用した後に '\n' を削除して、後続の std を確認する必要があります)。 ::getline() は混乱していません..

数値を読み取りたい場合は、行を読み取ってから、行から数値を解析します。

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

linestream >> value;
于 2012-07-06T02:26:53.880 に答える