C++ 尝试创建直方图的矢量

C++ Vector trying to create histogram

本文关键字:直方图 创建 C++      更新时间:2023-10-16

所以今天我决定用向量写一个简单的直方图,但是当我编写这个程序并编译它时,输出显示"*"的永无止境。

#include <iostream>
#include <conio.h>
#include <ios>
#include <vector>
#include <algorithm>

using std::cout;
using std::vector;
using std::cin;
using std::endl;

int main()
{
int x;
double k;
cout<<"How many range would you like = ";
    cin>>x;
vector<double> number; //All data was being stored here
cout<<"Input the number to be included in histogram = ";
while(cin>>k)
number.push_back(k);

x = x*10;
sort(number.begin(), number.end());

for(int i=0;i<x;i+=10) // Problem is on this loop statement, but I can't fix it.
{
    vector<double>::size_type u = 0;
    cout<<i<<"-"<<i+9<<" = "; //The range, Intended to put the "*" besides it.
    while(u < number.size())
     {
        if( number[u]<=i+9 && number[u]>=i)
        cout<<"*"; //For showing how many numbers on that range
        else
            u++;
    }
    cout<<endl;
}
getch();
return 0;
  }

没有显示错误,只有第一个范围内"的永无止境。例如,当程序编译时,我输入数据,它显示"0-9 = *******",它只是继续重复而不转到下一行。有什么建议可以解决这个问题吗?编辑:我之前尝试使用迭代器,但它与这个具有相同的输出。

所以,在你的while循环中...

if( number[u]<=i+9 && number[u]>=i)
    cout<<"*";

你有那个代码。 问题是,在此while循环中,您只在if elseelse部分中递增u。 因此,如果您进入while循环并且此if条件返回 true ,它将永远保持true。 您将永远陷入执行cout<<"*";while循环中,因为您没有执行任何操作来更改此处u的值。

问题是:

if( number[u]<=i+9 && number[u]>=i)
    cout<<"*"; //For showing how many numbers on that range
else
    u++;

一旦你在范围内找到一个数字,else意味着你不会继续下一个数字;你会留在那里,永远打印*

你可以简单地删除else;或者你可以把它构造成一个for循环,这可能会使它更明显地正确:

for (size_t u = 0; u < number.size(); ++u)

或者,自 2011 年以来,新式for循环:

for (double n : number) {
    if (n < i+10 && n >= i) {
        cout << "*";
    }
}

我还冒昧地修复了逻辑,例如,不排除9.5