如果用户输入了多个整数,我该如何抛出错误



所以这是我的代码:

#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, 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,59433。如果用户输入多个用空格分隔的整数,我如何抛出错误消息?示例:"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";或";字符串";等等是字符串(或char*,如果我错了,请纠正我((不正确(。

这也意味着;3 45 32〃解释为字符串,导致另一个循环运行。

注意:我并没有真正测试这个代码,所以它可能是完全错误的。

编辑:好吧,经过一些测试,我意识到这段代码需要重新编写。

首先;3 45 32〃未被解释为字符串(现在可以理解(。相反,第一个数字(空白之前(被保存为整数,所有其他数字都存储在缓冲区中(下一个cin将用它填充(,我们可以避免再次使用cin.clear()cin.sync()

问题是,你可以接受第一个整数,忽略第一个空白之后的所有内容吗?如果没有,您将不得不将输入保存为字符串,并从中提取您想要的任何数据

为了在本次编辑中查找参考文献,我将保留原始答案。

相关内容

  • 没有找到相关文章

最新更新