-4

私はこれを試しましたが、うまくいきませんでした.5文字のユーザー入力を取得してから印刷しようとしています.

string input = "";
const int max = 5;
char string[max] = { };
cout << "Please enter 5 letters: " << endl;
cin.getline(string, max, '\n');
cout << "Your letters :" << string[max];
4

1 に答える 1

1

何が機能していないかを理解したと思います:

まず、最後に印刷してstring[max]います。stringchar[]サイズが であるためmax、実際には index にデータがありません。maxそのインデックスは0tomax-1です。実際には、変数の文字の直後にメモリ内にあるものからランダムな文字を出力していstringます。

したがって<< string[max]、最後の行ではなく、 << string.

次に、その変更を行った後でも、入力された 5 文字ではなく、4 文字しか出力されないように見えます。これは、char[]s の形式の文字列にヌル ターミネータがあるためです。したがって、のcin.getline5 文字だけを埋めるように指示しているためstring、最初の 4 文字は入力からの実際の文字で埋められ、最後の文字は'\0'です。

したがって、入力が の場合"hello"string次の値が含まれます{ 'h', 'e', 'l', 'l', '\0' }。そして、それを印刷すると、もちろん、配列には実際には 4 文字しかありません。

2 つの注意事項:string inputはプログラムのどこにも使用されていないため、問題から除外する必要があります。また、char string[max]混乱を避けるために、変数を別の名前にする必要があります。

これが役立つことを願っています!

于 2013-10-02T14:23:32.557 に答える