除非我输入逗号,否则我的控制台不会结束程序。为什么?

问题描述 投票:0回答:1

我正在尝试构建一个程序,要求用户将数字输入到向量中,并将这些数字显示到控制台。每次我输入数字时,程序都不会停止运行,除非我输入逗号。我该如何解决这个问题?

这是我的代码

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int series_of_numbers;
    vector<int> seriesVector;

    cout << "Enter a series of numbers ending with 0, separated by space." << endl;

    while (cin >> series_of_numbers) {
        seriesVector.push_back(series_of_numbers);
    }

    for (int i = 0; i < seriesVector.size(); ++i) {
        cout << seriesVector[i] << " ";
    }

    return 0; 
}

我的控制台 Console

c++ console
1个回答
0
投票

您的程序将继续读取值,直到出现流错误,或者您的向量抛出

std::bad_alloc
并且进程终止。

当您在输入中添加逗号时,可能会导致流错误(取决于系统区域设置),因为您尝试将格式化输入写入

double
值。在美国语言环境中,逗号对于双精度型中的任何字符都无效。在某些欧洲语言环境中,它是小数点分隔符,因此在某些情况下逗号也不会停止您的程序。

问题在于程序不知道您打算输入多少个值,因此如果可能的话它会很高兴地继续等待更多值。在许多终端中,您可以通过按 Ctrl-D(有时按 Enter)来结束输入。

您的实际提示是:

输入一系列以 0 结尾的数字,以空格分隔。

您的循环没有强制执行这些约束中的任何一个。现在,它将允许任意数量的空格(包括换行符),并且不会检查哨兵值 0 来结束输入。

所以你可以选择如何处理它。这将读取值,直到流错误或读取零:

double val; while (cin >> val && val != 0) { seriesVector.push_back(val); }
或者,您可以读取单行输入,然后从中读取以空格分隔的 

double

 值。这种方法不需要特殊的零值来表示结束。您可以简单地解析该行中的所有值:

string line; if (getline(cin, line)) { istringstream iss(line); double val; while (line >> val) { seriesVector.push_back(val); } }
    
© www.soinside.com 2019 - 2024. All rights reserved.