gpt4 book ai didi

C 程序没有返回任何东西

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:07:28 25 4
gpt4 key购买 nike

我编写了一个 C 程序来对数组进行排序,但该程序没有返回任何内容——它只是运行并停在那里,就好像它在等待输入一样。下面是代码:

#include<stdio.h>

bool unsorted(int ar[],int x){
int c;
for(int i=1;i<=x;i++){
if(ar[0]>ar[i]){
return true;
} else {
return false;
}
}
}

void sort(int arr[],int s){
int h,b;
while(unsorted(arr,s)){
h=arr[0];
for(int i=0;i<=s;i++){
if(arr[i]>h){
b=arr[i];
arr[i]=h;
h=b;
}
}
}
for(int i=0;i<=s;i++){
printf("%d",arr[i]);
}
}
int main(){
int arr[3]={ 2,1,3 };
sort(arr,3);
return 0;
}

最佳答案

如果第一个元素不是最小的,您的函数 unsorted 返回 true。不检查是否有任何其他 2 个元素的顺序错误。这会导致错误的结果,但不是当前问题的原因。

在你的排序循环中,你检查是否有任何元素比第一个大,然后交换它们。这意味着升序更改为降序。这将导致 unsorted 函数始终返回 true 并且您的循环永远不会终止。

要修复它,请更改条件:

void sort(int arr[],int s) {
int h,b;
while (unsorted(arr,s)) {
h=arr[0];
for (int i = 1; i < s; i++) {
if (h > arr[i]) {
b = arr[i];
arr[i] = h;
h = b;
}
}
}
for (int i=0; i < s; i++) {
printf("%d",arr[i]);
}
}

索引范围也是固定的。

这至少应该使您的循环终止。它不会生成排序列表,因为您过早终止。

首先,您的 unsorted 函数需要一些更新:

bool unsorted(int ar[], int x) {
int c;
for (int i = 1; i < x; i++) {
if (ar[i-1] > ar[i]) {
return true;
}
}
return false;
}

如果第一个元素最低但其他元素不适合,如 {1, 4, 3, 6},这也应该返回 true。还要注意固定索引范围。

您需要对排序部分应用类似的修复,以处理第一个元素之后的元素中的乱序值。

关于C 程序没有返回任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54971787/

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