【问题标题】:Why my code is not printing the sorted array?为什么我的代码没有打印排序后的数组?
【发布时间】:2019-03-11 21:54:42
【问题描述】:

为什么代码没有打印任何东西?这段代码应该做的是以这种方式对二维数组进行排序: 二维数组表示一个 {x,y},然后代码需要对其进行排序,包含 x =0 的行需要排在下一个。 这里的交换功能是在两行之间交换。现在,当我尝试打印排序后的数组时,输出中什么也没有得到

#include <stdio.h>
void swap(int p1[], int p2[]);
int arrange(int p[][2], int n);


void swap(int p1[], int p2[]){
  for(int i=0; i<2; i++){
    int temp=p1[i];
    p1[i]=p2[i];
    p2[i]=temp;
  }
}

int arrange(int p[][2], int n){
  int idx=0;
  for(int i=0; i<n; i++){
    if(p[i][0] >= 0 && (i+1)<n)
        if(p[i+1][0] <0) {
            swap(&p[i][0],&p[i+1][0]);
            idx++;
        }
    else if(p[i][0]<0)
        idx++;
  }
return 1;
}

int main()
{
  int a[4][2]={{1,2},{6,7},{-10,5},{0,1}};
  arrange(a[4][2], 4);
  for(int i=0; i<4; i++){
        printf("{%d, %d}, ", a[i][0], a[i][1] );
  }

}

【问题讨论】:

  • arrange(a[4][2], 4); 应该是arrange(a, 4);
  • 是的,认真对待编译器的警告。

标签: c arrays function pointers multidimensional-array


【解决方案1】:

为什么代码没有打印任何东西?

因为它不能编译,因为你的编译器应该给出错误和警告。

为了修复错误,改变这个:

arrange(a[4][2], 4);

到那个:

arrange(a, 4);

附录:

以下是带有Wall 标志的 GCC 给我的警告:

prog.cc: In function 'int arrange(int (*)[2], int)':
prog.cc:17:7: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
17 |     if(p[i][0] >= 0 && (i+1)<n)
   |

为了修复该警告,我将您的代码更改为:

if(p[i][0] >= 0 && (i+1)<n) {
    if(p[i+1][0] <0) {
        swap(&p[i][0],&p[i+1][0]);
        idx++;
    }
} else if(p[i][0]<0) {
    idx++;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2021-03-05
    相关资源
    最近更新 更多