我的C ++程序无法正常工作

时间:2015-03-06 15:24:00

标签: c++

我必须在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)<<" ";
    }
}

2 个答案:

答案 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);。)

如果使用索引替换指针算法,您的排序例程也会变得更易读。