行ベースの読み取りが必要なようです。このため、おそらくgetline
一貫して使用し、次に行から数値を解析する必要がある場合は各行を解析する必要があります。これにより、入力の読み取りがより一貫したものになります。
この方法では、次の読み取り操作が新しい行で開始されることを保証するために、各行の終わりを手動でスキャンする必要はありません。
また、入力要求を繰り返すためのエラー処理の追加も簡単になります。
例えば
#include <string>
#include <iostream>
#include <istream>
#include <ostream>
#include <sstream>
int parse_integer(const std::string& input)
{
std::istringstream iss(input);
int result;
if (!(iss >> result))
{
// error - throw something?
}
return result;
}
int main()
{
int number;
std::string str;
int accountNumber;
std::string inputline;
std::cout << "Enter number: ";
if (!std::getline(std::cin, inputline))
{
// error - throw something?
}
number = parse_integer(inputline);
std::cout << "Enter name:";
if (!std::getline(std::cin, inputline))
{
// error - throw something?
}
str = inputline;
std::cout << "Enter account number:";
if (!std::getline(std::cin, inputline))
{
// error - throw something?
}
accountNumber = parse_integer(inputline);
return 0;
}