C ++如何在不破坏程序的情况下输入用户值
C++ How to enter user values without breaking program
我正在尝试从用户那里获取一个整数,但如果他们键入 "ckefkfek",它将导致程序出现垃圾邮件并中断。我也希望他们输入一个浮点数,但我遇到了同样的问题,不知道如何检查这个。
int option = 0;
while (option != 3)
{
cout << "Enter 1, 2, or 3: ";
cin >> option;
switch (option)
{
case 1:
cout << "Enter a float: ";
float myfloat;
cin >> myfloat;
myFunc(myfloat); // must be a float for this function to work.
break;
case 2:
// do stuff
break;
case 3:
// do stuff
break;
default:
cout << endl << "Not a valid option." << endl;
break;
}
}
我怎样才能做到这一点而不会经常出错?谢谢!
bool input_ok = false;
while (!input_ok)
{
cout << "Enter 1, 2, or 3: ";
if (cin >> option)
{
input_ok = true;
...
}
else
{
cout << "Stop being silly\n";
std::string dummy;
if (cin >> dummy)
cin.clear();
else
throw std::runtime_error("OK, I'm not playing any more");
}
}
基本上如果输入可以失败,就需要测试是否失败。您可以通过使用 cin >> option; if (cin) ...
读取流后检查流的状态来测试它,或者像这样组合读取和测试:if (cin >> option) ...
如果输入失败,读取任何无法解析为整数的内容并丢弃,然后重试。
我正在尝试从用户那里获取一个整数,但如果他们键入 "ckefkfek",它将导致程序出现垃圾邮件并中断。我也希望他们输入一个浮点数,但我遇到了同样的问题,不知道如何检查这个。
int option = 0;
while (option != 3)
{
cout << "Enter 1, 2, or 3: ";
cin >> option;
switch (option)
{
case 1:
cout << "Enter a float: ";
float myfloat;
cin >> myfloat;
myFunc(myfloat); // must be a float for this function to work.
break;
case 2:
// do stuff
break;
case 3:
// do stuff
break;
default:
cout << endl << "Not a valid option." << endl;
break;
}
}
我怎样才能做到这一点而不会经常出错?谢谢!
bool input_ok = false;
while (!input_ok)
{
cout << "Enter 1, 2, or 3: ";
if (cin >> option)
{
input_ok = true;
...
}
else
{
cout << "Stop being silly\n";
std::string dummy;
if (cin >> dummy)
cin.clear();
else
throw std::runtime_error("OK, I'm not playing any more");
}
}
基本上如果输入可以失败,就需要测试是否失败。您可以通过使用 cin >> option; if (cin) ...
读取流后检查流的状态来测试它,或者像这样组合读取和测试:if (cin >> option) ...
如果输入失败,读取任何无法解析为整数的内容并丢弃,然后重试。