为什么不在屏幕上打印任何内容?

时间:2015-04-01 06:24:33

标签: c++

#include <iostream>

using namespace std;

class A
{
    public:
    int index;
    int t;
    int d;
    int sum;
};

A arr[1000];

bool comp (const A &a, const A &b)
{
    if (a.sum < b.sum)
        return true;
    else if (a.sum == b.sum && a.index < b.index)
        return true;
    return false;
}
int main (void)
{
    int n,foo,bar,i;
    i = 0;
    cin>>n;
    while ( n != 0 )
    {
        cin>>foo>>bar;
        arr[i].index = i+1;
        arr[i].t = foo;
        arr[i].d = bar;
        arr[i].sum = arr[i].t+arr[i].d;
        n--;
        i++;
    }
    sort(arr,arr+n,comp);
    for ( int j = 0; j < n; j++ )
        cout<<arr[j].index;
    cout<<"\n";
    return 0;
}

因此,我制作了这个接受用户值的程序,然后根据特定条件对它们进行排序。但是,当我尝试打印数组的值时,它不会打印它。我不知道为什么。请帮忙。谢谢!

PS:我甚至试图在不使用比较器功能的情况下打印数组的值,但它仍然没有打印。

编辑:得到了我的错误,正如评论中一些了不起的人所提到的那样。但是,在输入值为

5
8 1
4 2
5 6
3 1
4 3

它应该以{{1​​}}的形式返回答案,而是返回4 2 5 1 3。基本上,它根据每行中2个元素的总和进行排序并打印索引。可能是什么问题?

1 个答案:

答案 0 :(得分:0)

由于您要在n循环中修改while的值,因此不进行排序。

所以,当循环结束后的n = 0时,没有什么可以排序(或者稍后打印):

sort( arr, arr + n, comp);

相当于

sort( arr, arr + 0, comp);

最简单的方法是使用for循环:

for( int i=0; i<n; ++i )
{
    ....
}

这样,n保持不变。