我正在尝试进行冒泡排序
#include <iostream>
#include <vector>
using namespace std;
int main() {
double small;
double big;
double i;
vector<double>list;
while(cin){
cin>>i;
list.push_back(i);
}
for(i=0;i<list.size()-1;i++){
small=list[i];
big=list[i+1];
if(small<=big){
}
else{
list[i]=big;
list[i+1]=small;
}
}
for(i=0;i<list.size()-1;i++)
cout<<list[i]<<'n';
return 0;
}
这是我的输入:
123
4141
515
231366
21378
12990
5
6
8
9
但它输出的是:
123
515
4141
21378
12990
5
6
8
9
9
231366
预期的输出应该是:5,6,8,912351541411299021378231366。有什么帮助吗?对不起,如果这微不足道。
9被读取两次,因为您使用的是while(cin)
,它应该是
while(cin >> i){
list.push_back(i);
}
您得到了一个额外的9
,因为它是您输入的最后一个东西,并且您没有正确地脱离循环。因此,您最终会将其添加到您的列表中两次。像这样的东西更合适:
while(cin>>i){
list.push_back(i);
cout << "Adding " << i << "n";
}
在你之前的事业中,你有以下几点:
while(cin){
cin>>i; // <-- reaches the end of file
list.push_back(i); // <-- puts something in the list even though we didn't read anything
}
请注意,当cin
达到EOF
时,您仍然会将i
添加到列表中,该列表仍然具有其旧值,因为除了EOF
之外,cin
没有读取任何输入。我在第一个代码段中的正确操作修复了这个问题。
您的输入循环运行了太多次,在列表末尾给出了一个重复的元素。如果您将while循环更改为:
while(cin >> i){
list.push_back(i);
}
则最后一个元素仅被添加一次。您还需要更改输出循环的边界。
请参阅有关while (cin)
的此问题
您必须运行嵌套循环
for(j=0;j<list.size()-1;j++){
for(i=0;i<list.size()-1-j;i++){
现在你把231366这个最大的数字移到了列表的末尾。你必须在.