gpt4 book ai didi

控制到达 C 中非 void 函数的末尾

转载 作者:行者123 更新时间:2023-11-30 16:32:03 25 4
gpt4 key购买 nike

我想检查一个数组在 C 中是否按 acs 或 desc 顺序排序。这是使用 mpicc -Wall -o file file.c 编译的结果,因为我稍后在代码中使用 MPI 库。

mypractice1.c: In function ‘isSorted’:
mypractice1.c:38:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
/usr/bin/ld: unrecognised emulation mode: ypractice1
Supported emulations: elf_x86_64 elf32_x86_64 elf_i386 elf_iamcu i386linux elf_l1om elf_k1om i386pep i386pe
collect2: error: ld returned 1 exit status

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <mpi.h>



//Function to check the order

int isSorted(int size, int array[]) {

if(size<=1)
return 1; //is ordered
int i;
for(i = 1; i < size; i++){
if(array[i] >= array[i-1])
return 1; //is Sorted ascending
else if (array[i]< array[i-1])
return 2; //is sorted descending
else return 0; //is not ordered
}
}

如何修复此错误?

最佳答案

你说你有:

// Function to check the order

int isSorted(int size, int array[])
{
if (size <= 1)
return 1; // is ordered
for (int i = 1; i < size; i++)
{
if (array[i] >= array[i - 1])
return 1; // is Sorted ascending
else if (array[i] < array[i - 1])
return 2; // is sorted descending
else
return 0; // is not ordered
}
}

您无法仅检查前两个值而返回。您可能应该定义是否希望数据按升序或降序排序,并验证这就是您所得到的,但如果您确实想分析数据的顺序,那么您可以使用:

// Function to check the order
// 0 all equal
// 1 non-decreasing (ascending)
// 2 non-increasing (descending)
// -1 inconsistent (some ascending, some descending)

int isSorted(int size, int array[])
{
if (size <= 1)
return 1; // is ordered; deemed ascending

int num_eq = 0; // Number of adjacent pairs that are equal
int num_lt = 0; // Number of adjacent pairs sorted ascending
int num_gt = 0; // Number of adjacent pairs sorted descending

for (int i = 1; i < size; i++)
{
if (array[i] > array[i - 1])
num_gt++; // is sorted ascending
else if (array[i] < array[i - 1])
num_lt++; // is sorted descending
else
num_eq++; // is not ordered
}

assert(num_gt + num_lt + num_eq == size - 1);

if (num_gt == size - 1)
return 1; // ascending with all unique
if (num_lt == size - 1)
return 2; // descending with all unique
if (num_eq == size - 1)
return 0; // all rows equal
if (num_gt != 0 && num_lt != 0)
return -1; // inconsistent sorting
if (num_gt + num_eq == size - 1)
return 1; // ascending with some equal
if (num_lt + num_eq == size - 1)
return 2; // descending with some equal
return -1; // can't happen?
}

还有其他方法可以做到这一点,但用尾部注释解释起来相当简单。在函数尾部使用 else if 链是可行且清晰的。它有一些优点。您可以对更多返回值进行编码,以区分严格升序和非递减,或者严格降序或非递增。

关于控制到达 C 中非 void 函数的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50317621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com