ユーザーから整数の行を読み取りたい。入力が終了したかどうかを確認する方法がわかりません。たとえば、私は次のようなことができるようになりたいです
int x[MAX_SIZE];
int i = 0;
while(cin.hasNext())
{
cin >> x[++i];
}
入力例:2 1 4 -6
cin
が必要なものが他にあるかどうかを確認するにはどうすればよいですか?
あなたは次のことをしなければなりません
int temp;
vector<int> v;
while(cin>>temp){
v.Push_back(temp);
}
また、を使用して入力の終了を確認することもできます
if(cin.eof()){
//end of input reached
}
それは非常に簡単です。あなたがする必要があるのは条件として抽出を実行することです:
while (i < MAX_SIZE && std::cin >> x[i++])
何らかの理由(文字が残っていない、無効な入力など)で抽出が失敗した場合、ループは終了し、失敗は入力ストリームのストリーム状態で表されます。
ベストプラクティスを考慮すると、静的C配列を使用するべきではありません。コンパイル時コンテナを使用する必要があります std::array<T, N>
(または、前者がサポートされていない場合は std::vector<T>
)。
std::vector
を使用した例を次に示します。また、入力のコピーを明示的に作成する必要がないイテレータを利用します。
std::vector<int> v{ std::istream_iterator<int>{std::cin}, std::istream_iterator<int>{}};
cin
がまだインタラクティブである場合、ユーザーがより多くの入力を提供するのを待つだけなので、「これ以上入力がない」という概念はありません(ユーザーがEOF
に信号を送った場合を除く) Ctrl+D または Ctrl+Z 適切に)。データの行を処理する場合は、ユーザーから行を取得し(たとえば、getline
を使用)、その入力を処理します(文字列ストリームなどから抽出します)。