5
#include<iostream>
using namespace std;

int main()
{
   char test[10];
   char cont[10];

   cin.getline(test,10);
   cin.getline(cont,10);

   cout<<test<<" is not "<<cont<<endl;
    return 0;
}

入力すると:

12345678901234567890

出力は次のとおりです。

123456789

cont空っぽのようです。誰かがそれを説明できますか?

4

5 に答える 5

9

istream::getline入力が長すぎる場合にフェイルビットを設定します。これにより、それ以上の入力ができなくなります。コードを次のように変更します。

#include<iostream>
using namespace std;

int main()
{
   char test[10];
   char cont[10];

   cin.getline(test,10);
   cin.clear();                    // add this
   cin.getline(cont,10);

   cout<<test<<" is not "<<cont<<endl;
    return 0;
}
于 2011-05-19T05:11:48.457 に答える
4

読み込んだ変数が行全体を保持するのに十分な大きさでない場合、入力操作は失敗し、を呼び出すまでストリームはそれ以上何も読みませんcin.clear()

データを保持するには、代わりにstd::stringを使用する必要があります。入力に合わせてサイズが変更されます。

std::string test;
std::string cont;

getline(cin, test);
getline(cin, cont);
于 2011-05-19T05:16:11.437 に答える
0

どこかからコピー

cin.getline Extracts characters from the input sequence and stores them as a c-string into the array beginning at s.

文字は、(n-1)文字が抽出されるか、区切り文字が見つかるまで抽出されます(このパラメーターが指定されている場合はdelim、それ以外の場合は'\ n')。入力シーケンスでファイルの終わりに達した場合、または入力操作中にエラーが発生した場合も、抽出は停止します。

12345678901234567890を入力した後、Enterキーを2回押したと思います

于 2011-05-19T05:10:55.550 に答える
0

標準では、次の条件の下で、入力したよりも「短い」行を取得できるとされています。

  1. 使用している C++ が標準に準拠していない可能性があります。- ありえない。
  2. EOF似たような文字をどこか にぶつけます。

char[]私の推測では、を aに変更してからstring (STL)試してください。また、一気に入力すると言うと12345678901234567890全部入ってしまいtestます。は 10 バイトの長さしかないためtest、123456789 が出力されます。failbitistream クラスに が設定されているため、cont には何も入力されず、それ以上の入力は禁止されます。このコードはstd::string.

    #include<iostream>
    #include <string>
    using namespace std;

    int main()
    {
       //char test[10];
       //char cont[10];

       string test;
       string cont;

       cin >> test;
       cin >> cont;

       //cin.getline(test,10);
       //cin.getline(cont,10);

       cout<<test<<" is not "<<cont<<endl;
        return 0;

}
于 2011-05-19T05:07:18.907 に答える