私はこれを試しましたが、うまくいきませんでした.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];
私はこれを試しましたが、うまくいきませんでした.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];
何が機能していないかを理解したと思います:
まず、最後に印刷してstring[max]
います。string
はchar[]
サイズが であるためmax
、実際には index にデータがありません。max
そのインデックスは0
tomax-1
です。実際には、変数の文字の直後にメモリ内にあるものからランダムな文字を出力していstring
ます。
したがって<< string[max]
、最後の行ではなく、 << string
.
次に、その変更を行った後でも、入力された 5 文字ではなく、4 文字しか出力されないように見えます。これは、char[]
s の形式の文字列にヌル ターミネータがあるためです。したがって、のcin.getline
5 文字だけを埋めるように指示しているためstring
、最初の 4 文字は入力からの実際の文字で埋められ、最後の文字は'\0'
です。
したがって、入力が の場合"hello"
、string
次の値が含まれます{ 'h', 'e', 'l', 'l', '\0' }
。そして、それを印刷すると、もちろん、配列には実際には 4 文字しかありません。
2 つの注意事項:string input
はプログラムのどこにも使用されていないため、問題から除外する必要があります。また、char string[max]
混乱を避けるために、変数を別の名前にする必要があります。
これが役立つことを願っています!