1

今、私はそれがcin.getlineこのように機能することを学びました。

cin.getline(dest string, number of charecters to put into string);

このプログラムを仮定します。

char s1[8]="Hellopo";
cin.getline(s1,5);
cout<<s1<<endl;

これは入力によるものでした:hhhhhhhhhhhhh

これはプログラムの出力でした:hhhh

このプログラムには 2 つの懸念事項があります。

1-) ユーザーが入力したものから 5 文字を取得し、s1 に保存するようにプログラムを設定しました。プログラムを実行すると、4文字しか出力されませんでした。

2-) また、ユーザーから取得したものを出力した後、プログラムが s1 の残りを出力し続けることを期待していました。しかし、それは後に止まりましたhhhh

私の2つの懸念を説明してください。ありがとうございました

4

4 に答える 4

7

この場合、 std::cin::getlineは 4 文字と null 終端を格納します (合計 5 文字)。そしてstd::cout、最初に見つかった null ターミネータで印刷を停止します。

于 2012-08-06T15:36:10.050 に答える
3

からistream::getline():

count-1 文字が抽出されました (この場合、setstate(failbit) が実行されます)。

これは、 を指定すると、文字5だけが読み取られることを意味します。4と:

...次に、ヌル文字 CharT() を配列の次の連続する場所に格納します

そのため、4 文字目の後にヌル文字が挿入されます。したがって、配列sには次の内容が含まれます。

'h' == s[0]
'h' == s[1]
'h' == s[2]
'h' == s[3]
0   == s[4]

は、最初のヌル文字が見つかったときにaのoperator<<出力を停止します。char*

于 2012-08-06T15:36:51.233 に答える
2

5 番目の文字は 0 ターミネータです。0 ターミネータを含むgetline(buffer,n)最大バイト数をバッファに格納します。nそしてcout << s1;、0ターミネータで停止します。

于 2012-08-06T15:34:45.570 に答える
1

5 番目の文字はヌル ターミネータで、文字列の終わりを示します。

于 2012-08-06T15:34:48.270 に答える