cin が機能する方法は、任意の量の入力を受け入れ、それぞれをスペースで区切ることです。特定の入力を要求すると、ユーザーに入力を求めるプロンプトが表示され、最初の文字列 (スペースまで) のみが取得されます。その後にさらに入力がある場合はcin >> input
、ユーザーに再度プロンプトを表示することなく、別の入力がその値を取得します。改行文字だけが残っているときに、入力の実際の最後にいつ到達したかがわかります。このコードにより、スペースで区切られた複数の文字列を入力し、ユーザーがテキストを入力した後にそれらを一度に処理できるようになります。
char input[4];
do // Start our loop here.
{
// Our very first time entering here, it will prompt the user for input.
// Here the user can enter multiple 4 character strings separated by spaces.
// On each loop after the first, it will pull the next set of 4 characters that
// are still remaining from our last input and use it without prompting the user
// again for more input.
// Once we run out of input, calling this again will prompt the user for more
// input again. To prevent this, at the end of this loop we bail out if we
// have come accros the end of our input stream.
cin >> input;
// input will be filled with each 4 character string each time we get here.
int i = name_index[name_number(input)];
cout << name[i].fullName;
} while (cin.peek() != '\n'); // We infinitely loop until we reach the newline character.
EDIT:また、4文字だけを割り当てても、最後に追加されるinput
文字列の終わりを考慮しないことに注意してください。'\0'
ユーザーが 4 文字を入力すると、実際には、文字列を に割り当てるときに不良メモリにアクセスしますinput
。4 文字 + 1 末尾の文字があるため、 には最低 5 文字を割り当てる必要がありますinput
。最善の方法はstd::string
、ユーザーが 4 文字を超えて入力しても適切にサイズ変更されるため、そのまま使用することです。