簡體   English   中英

C 程序沒有返回任何東西

[英]C Program isn't returning anything

我編寫了一個 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 還要注意固定索引范圍。

您需要對排序部分應用類似的修復程序,以處理第一個元素之后的元素中的亂序值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM