C++ 陷入无限循环

C++ 陷入无限循环,c++,infinite-loop,C++,Infinite Loop,当我为类运行这个程序时,每当我输入一个“|”字符来结束while循环时,我就会陷入一个无限循环中。我觉得我错过了一些明显的东西 这个问题在Bjarne Stroustrup的C++编程书第126页上找到,但是作为一个快速运行,我只需要找出用户输入的最大和最小的数字,然后返回信息。输入“|”应该退出循环,这样我就可以深入到它提供所有输入数字信息的部分,但每当我输入该字符(或任何不是数字的字符)时,它就会创建一个无限循环 这是我的密码 int main() { vector<doubl

当我为类运行这个程序时,每当我输入一个“|”字符来结束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;
}
intmain()
{
向量nums;
while(true)
{
双倍电流;
cout>当前数量;
如果(当前_num=='|')
打破
nums.push_back(当前_num);
排序(nums.begin(),nums.end());

cout您正在将数字与字符进行比较

if (current_num == '|')

current_num
包含类型为double的数字,您正试图将其与字符进行比较,该字符是
“|”
您正在将字符与
double
进行比较,如下所示:

if (current_num == '|')
这种比较永远不会达到你想要的效果

首先读取一个字符,将其与
“|”
进行比较,然后根据需要进行双重转换


注意:


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

,因为您正试图将非数字插入到一个double中。 我认为在您的情况下,您应该将输入读入字符串/字符并对其进行解析。

问题在于:

if(current_num == '|'){
}
相反,读入
std::string
,并将其解析为double

因此,修改后的代码段将如下所示:

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";
    }
while(true)
{
字符串字符串;
双倍电流;
库特>斯特努姆;
如果(strNum==“|”)
打破
istringstream strm(strNum);
strm>>当前数量;
nums.push_back(当前_num);
排序(nums.begin(),nums.end());

cout
“|”
不是双精度的,是吗?为什么要将数字存储在数组中并进行排序?只需继续运行值问题不(仅限于)比较,但字符串值插入到了double中。比较不会创建无限循环。插入会创建无限循环。为什么这个答案被否决?它是正确的。它与quantdev的答案大致相同,但quantdev的现在是+4,而这个是-1。我有一些错误,我纠正了它们:)may by the original没有那么精确,但它已经是正确的。即使有人认为它不值得投赞成票,我也不认为有任何理由有人会投反对票。这就是为什么我感到惊讶。很好的昵称,顺便说一句:)@freeigname谢谢你这么学究;)是的,我知道这是有史以来最酷的名字,哈哈;)没有投反对票,但是FWIW这很好但问题的“第2部分”的“第1部分”不是从
std::cin
读入适当的类型,也不是选择0或-1等哨兵而不是
“|”