我必须在C ++中创建一个程序来读取数字,然后按升序排列它们。数字可以是无限的,因此程序应该读取数字,直到输入任何特定值来终止读取过程。我写了下面的代码,但没有工作,并显示不需要的输出。如果有人能帮助我,我将非常感激。
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
int *p,*q,i=1,j,k,temp;
p=(int*)malloc(sizeof(int));
cin>>*p;
while((*p)!=-1) //read until -1 is entered
{
i++;
p=(int*)realloc(p,sizeof(int)*i);
q=p;
p=p+(i-1); //going to next address to read
cin>>*p;
}
p=q;
for(j=1;j<i;++j)
{
for(k=0;k<i-j-1;++k)
{
if((*(p+k))>(*(p+k+1)))
{
temp=*(p+k);
*(p+k)=*(p+k+1);
*(p+k+1)=temp;
}
}
}
cout<<"\n";
for(j=0;j<i-1;++j)
{
cout<<*(p+j)<<" ";
}
}
答案 0 :(得分:2)
扩展我的评论,这是实际的C ++解决方案的样子:
#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> numbers;
int number = -1;
std::cin >> number;
while (number != -1)
{
numbers.push_back(number);
number = -1;
std::cin >> number;
}
std::sort(numbers.begin(), numbers.end());
for (int x : numbers)
{
std::cout << x << ' ';
}
std::cout << '\n';
}
答案 1 :(得分:2)
在
p=p+(i-1);
p
不再是对realloc
有效的指针。
替换
p=p+(i-1);
cin>>*p;
带
cin >> p[i-1];
并摆脱q
(如果您坚持混淆,可以使用cin >> *(p + i - 1);
。)
如果使用索引替换指针算法,您的排序例程也会变得更易读。