所以今天我决定使用vector编写一个简单的直方图,但是当我编写这个程序并编译它时,输出显示了一个永无止境的“*”。
#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 = ** * **** “并且它会继续重复而不会转到下一行。有什么建议可以解决这个问题吗? 编辑:我之前尝试使用过迭代器,但它与此输出具有相同的输出。
答案 0 :(得分:1)
所以,在你的while
循环......
if( number[u]<=i+9 && number[u]>=i)
cout<<"*";
你有那个代码。问题是,您只需在此u
循环中的else
if else
部分中增加while
。因此,如果您进入while
循环并且此if
条件返回true
,它将始终保持true
。您将永远陷入执行while
的{{1}}循环中,因为您在此处无法更改cout<<"*";
的值。
答案 1 :(得分:1)
问题在于:
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
不被排除。