如何解决如果用户输入多个整数,如何抛出错误
这是我的代码:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
long int iterFunc(int);
long int recurFunc(int);
int main() {
int n;
while(true){
try{
cout << "Enter: ";
if (!(cin >> n))
throw("Type Error");
if (n < 0)
throw n;
else
if (n == 0)
break;
cout << "Iterative: " << iterFunc(n) << endl;
cout << "Recursive: " << recurFunc(n) << endl;
}
catch(int n){
cout << "Error. Enter positive number." << endl;
}
catch(...){
cin.clear();
cin.ignore(100,'\n');
cout << "Error. Please enter a number" << endl;
}
}
cout << "Goodbye!";
return 0;
}
long int iterFunc(int n){
vector<long int> yVec = {1,1,3,5};
if (n <= 5)
return yVec[n - 1];
else
for(int i = 5;i < n; i++){
long int result = yVec[i - 1] + 3 * yVec[i- 5];
yVec.push_back(result);
}
return yVec.back();
}
long int recurFunc(int n){
switch (n) {
case 1:
case 2:
case 3:
return 1;
break;
case 4:
return 3;
break;
case 5:
return 5;
break;
default:
return recurFunc(n - 1) + 3 * recurFunc(n - 5);
break;
}
}`
程序应仅接受一个整数,并使用迭代和递归实现返回函数的y。例如:30、59、433。如果用户输入的整数大于1(以空格分隔),如何显示错误消息?例如:“ 3 45 32”。
我尝试使用if (cin.getline == ' ') throw("Error name")
,但程序仍执行并返回输入中数字的函数y
解决方法
类似的作品:
int main()
{
std::string str;
std::cout << "? : ";
std::getline(std::cin,str);
std::string::size_type pos(0);
int i = std::stoi(str,&pos);
if (pos != str.length())
return 1;
}
,
我发现我的旧代码的一部分可能会派上用场。
int val;
do
{
cin>>val;
if(!cin){ //you can add more conditions here
cin.clear();
cin.sync();
/* additional error handling */
}
else{
break; //input is correct - leaving loop
}
}while(true); //or here
!cin
的基本作用是-它检查您实际要写入的值的类型,因为无论如何都需要弄清楚数据类型是否写入了val
的正确类型。这意味着“ 30”或“ 433”等是整数(正确),“ s”或“ string”等是字符串(或char *,如果我错了,请更正我)(不正确)。
这还意味着,“ 3 45 32” 应应解释为字符串,应应导致另一个循环运行。
注意::我并未真正测试此代码,因此可能是完全错误的。
编辑:好吧,经过一些测试,我意识到这段代码需要重新调整。
首先,“ 3 45 32” 不解释为字符串(现在可以理解)。相反,第一个数字(在空格之前)被保存为整数,所有其他数字都存储在缓冲区中(下一个cin将被其填充),我们可以避免再次使用cin.clear()
和cin.sync()
问题是-您可以接受第一个整数并忽略第一个空格之后的所有内容吗?如果没有,则必须将输入另存为字符串,并从中提取所需的任何数据。
我将保留原始答案,以简化在此编辑中查找引用的过程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。