0
char ch[4];  
char* ptr;  
ptr = ch;  
while(1)  
{  
  cin >> *ptr;  
if(*ptr == '\n')  
break;  
ptr++;  
}

ここでは、ユーザーが ENTER を入力したときに while ループから抜け出そうとするサンプル コードを少し書きましたが、機能していません。私を助けてください。前もって感謝します。

4

4 に答える 4

6

1 文字を取得するには、 を使用しますstd::istream::get。これは、改行を取得する場合にも機能するはずです。

しかし、改行を取得するまでループで文字を取得する代わりに、次のようなものを使用しないでstd::getlineください:

std::string str;
std::getline(cin, str);

または、最大 3 文字のみを取得する場合は、次を使用できますstd::istream::getline

char ch[4];
cin.getline(ch, 4, '\n');
于 2012-04-16T06:39:19.750 に答える
1

以下は行を読み取ります。

istream& getline (char* s, streamsize n );
于 2012-04-16T06:42:45.147 に答える
1

入力を文字の値に読み込んでいます。という*ptrことです。データを受け取るためのものである文字の配列へのポインタである単純な ptr だけが必要だと思います。あなたが書いたものは基本的にこれです:

char c;
cin >> c;

>>Joachim Pileborgが上で指摘しているように、演算子は改行のように空白をスキップするため、それがあなたの意図したものではなく、たとえそうであったとしても機能するとは思いません。一般に、入力の読み取りに関しては、非常に堅牢であることが常に最善です。十分なスペースを提供し、自動的に拡張できる変数を使用するか ( などstd::string)、システムに空き容量を伝えます ( などfgets())。

于 2012-04-16T06:39:32.357 に答える
1

抽出演算子は先頭の空白をスキップし、後続の空白に遭遇すると実行を停止します。したがって、このようなことをしたい場合は、std::istream::get() または std::istream::getline() を使用します。

于 2014-03-05T08:50:02.000 に答える