cin
から にストリーミングしstring
、 を作成しistringstream
、そこからあなたの番号にストリーミングしても意味がありません。ユーザーに警告/エラー メッセージを生成するのではなく、 として扱われ、無視されるなど、余分なタイプのエラーの余地が残るだけ"12x"
です12
。x
次のように直接読むことができます。
const char* prompt = "\nPlease enter x-coordinate: ";
while (cout << prompt && !(cin >> x))
{
cin.clear();
cin.ignore(256, '\n');
prompt = "Please enter integer: \n";
}
プロンプトを変更する必要がない場合は、ループに直接入れることができます。
while (cout << "\nPlease enter x-coordinate: " && !(cin >> x))
{
cin.clear();
cin.ignore(256, '\n');
std::out << "Please enter an integer.\n";
}
注: 最初の作業に少し似たものが表示されます。ここでは、string
ではgetline
なくへの読み取りが使用>>
されます。これは、行番号をカウントし ( よりもファイルの解析に役立つstd::cin
)、行に表示される値を確認できるため、良い習慣になる可能性があります。他の期待されるデータと一緒に。それは次のようになります。
std::string line;
while (std::cout << "Enter coordinate:" &&
getline(std::cin, line))
{
std::istringstream iss(line);
if (iss >> x)
break;
std::cout << "Error - invalid coordinate, please enter an integer\n";
}
...use x...