C++ 无法在以下代码中输入n(cin>;>;n)
/** 编写一个程序,读取一系列数字并将其存储在向量中。在用户输入他或她想要的所有数字后,询问用户想要求和的数字数量。对于答案N,打印向量前N个元素的和。例如:“请输入一些数字(在提示停止时按“I”):“12 23 13 24 15”请输入您希望求和的数字数量,从第一个开始:“3”前3个数字的总和:12、23和13是48。”处理所有输入。例如,如果用户要求的数字总和大于向量中的数字总和,请确保给出错误消息 **/C++ 无法在以下代码中输入n(cin>;>;n),c++,error-handling,C++,Error Handling,/** 编写一个程序,读取一系列数字并将其存储在向量中。在用户输入他或她想要的所有数字后,询问用户想要求和的数字数量。对于答案N,打印向量前N个元素的和。例如:“请输入一些数字(在提示停止时按“I”):“12 23 13 24 15”请输入您希望求和的数字数量,从第一个开始:“3”前3个数字的总和:12、23和13是48。”处理所有输入。例如,如果用户要求的数字总和大于向量中的数字总和,请确保给出错误消息 **/ #包括 #包括 使用名称空间std; int main() { 尝试 { 向量数;
#包括
#包括
使用名称空间std;
int main()
{
尝试
{
向量数;
int-num;
库特南)
数字。推回(num);
int n,和=0;
cout>n;
如果(n>numbers.size())
投掷66枚;
对于(inti=0;i你没有检查你是否真的读过任何东西
:
#包括
int main()
{
std::cout当您向cin提供EOF时,它会导致cin.failbit
变为true。当failbit设置为true时,所有后续的cin读取都将被忽略。因为n没有默认值,因此从此处执行变得不可预测。在我的例子中,程序崩溃是因为它抛出了66。添加cin.clear()
在while循环之后可以解决这个问题,但不建议这样做。如果用户想继续,有两个简单的解决方案可以在每次输入后停止或提示用户
#include<iostream>
#include<vector>
using namespace std;
int main()
{
try
{
vector<int> numbers;
int num;
cout<<"Now enter the numbers";
while(cin>>num)
numbers.push_back(num);
int n,sum=0;
cout << "Enter the nth number to find sum of elements till n : ";
cin>>n;
if(n >numbers.size())
throw 66;
for(int i=0;i<n;i++)
sum+=numbers[i];
cout << "sum is "<<sum;
return 0;
}
catch(int k)
{
cerr<<"Error "<<k;
return -1;
}
}
#include <iostream>
int main()
{
std::cout << "std::cin is " << (std::cin ? "ready" : "done") << "\n";
int n = -42;
std::cin >> n;
std::cout << n << "\n";
std::cout << "std::cin is " << (std::cin ? "ready" : "done") << "\n";
n = -42;
std::cin >> n;
std::cout << n << "\n";
std::cout << "std::cin is " << (std::cin ? "ready" : "done") << "\n";
}