C++ 无法在以下代码中输入n(cin>;>;n)

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() { 尝试 { 向量数;

/**

编写一个程序,读取一系列数字并将其存储在向量中。在用户输入他或她想要的所有数字后,询问用户想要求和的数字数量。对于答案N,打印向量前N个元素的和。例如:“请输入一些数字(在提示停止时按“I”):“12 23 13 24 15”请输入您希望求和的数字数量,从第一个开始:“3”前3个数字的总和:12、23和13是48。”处理所有输入。例如,如果用户要求的数字总和大于向量中的数字总和,请确保给出错误消息

**/

#包括
#包括
使用名称空间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";
}