卡在无限循环中

时间:2014-09-29 04:00:03

标签: c++ infinite-loop

当我在课堂上运行这个程序时,每当我输入' |'时,我就会陷入无限循环。结束while循环的字符。我觉得我错过了一些明显的东西。

这个问题可以在Bjarne Stroustrup的C ++编程书的第126页找到,但作为一个快速的概述,我只是应该找到用户输入的最大和最小的数字。返回信息。输入' |'应该退出循环,以便我可以到达它提供有关所有输入数字的信息的部分,但每当我输入该字符(或任何不是数字的字符)时,它会创建一个无限循环

这是我的代码。

int main()
{
    vector<double> nums;

    while (true)
    {
        double current_num;
        cout << "enter a double \n";
        cin >> current_num;
        if (current_num == '|')
            break;
        nums.push_back(current_num);
        sort(nums.begin(), nums.end());
        cout << nums[nums.size()-1] << " is the largest so far.\n";
        cout << nums[0] << " is the smallest so far.\n";
    }
    cout << nums[nums.size()-1] << " is the largest number.\n";
    cout << nums[0] << " is the smallest number.\n";
    cout << "Number of values entered: " << nums.size() << '\n';
    double sum = 0;
    for (int k = 0; k<nums.size(); ++k)
        sum += nums[0];
    cout << "Sum of all values: " << sum << '\n';
    for (int j=0; j<nums.size(); ++j)
        cout << nums[j] << ' ';
    return 0;
}

我在课堂上使用VS13并且我没有遇到这个问题,但是现在我用notepad ++编写代码并使用PuTTY在家编译(虽然我怀疑这与它有什么关系)。

4 个答案:

答案 0 :(得分:6)

您正在将角色与double进行比较:

if (current_num == '|')

这种比较永远不会做你想做的事。

首先阅读字符,将其与'|'进行比较,然后根据需要进行双重转换。


注意:

对于您的记录,'|'的ASCII值为124,因此如果您输入124,您的循环将结束...

答案 1 :(得分:2)

您正在将数字与角色进行比较。

if (current_num == '|')

current_num包含您尝试与'|'

的字符比较的double类型中的数字

答案 2 :(得分:2)

因为您试图将非数字插入双精度数。 在你的情况下,你应该将输入读入字符串/ char并解析它。

答案 3 :(得分:2)

问题出在这里:

if(current_num == '|'){
}

而是读入std::string并将其解析为双倍。

因此修改后的代码段看起来像这样:

while (true)
    {
        string strNum;
        double current_num;
        cout << "enter a double \n";
        cin >> strNum;
        if (strNum == "|")
            break;
        istringstream strm(strNum);
        strm >> current_num;
        nums.push_back(current_num);
        sort(nums.begin(), nums.end());
        cout << nums[nums.size()-1] << " is the largest so far.\n";
        cout << nums[0] << " is the smallest so far.\n";
    }