簡體   English   中英

作業的冒泡排序代碼無法按預期工作

[英]Buble sort code for homework doesn't work as expected

我的任務是制作一個可以對名稱進行排序的程序。

程序的輸出:

How many names will be inputed? 3
Angelia Kho
Angel
Angelina

Sorted Names(Ascending):
1. Angel
2. Angelia Kho
3. Angelina

這是我的代碼:

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main()
{
    int a;
    char ignore;
    
    printf("How Many names will be inputed? ");
    scanf("%d", &a);
    
    scanf("%c", &ignore);
    
    char names [a][255];
    char temp [255];
    
    int j;
    for(j = 0; j < a; j++){
        scanf("%[^\n]", names[j]);
        scanf("%c", &ignore);
    }
    
    int i;
    
    for(i = 0; i<a; i++)
    {
        for(j = i; j<a; j++)
        {
            if(strcmp(names[i], names[j]> 0))
            {
                strcpy(temp, names[i]);
                strcpy(names[i], names[j]);
                strcpy(names[j],temp);
            }
        }
    }
    
    printf("\nsorted names(Ascending): \n");
    for(i = 0; i < a; i++)
    {
        printf("%d. %[^\n]", i, names[i]);
    }
}

錯誤是:

[Warning]passing argument 2 of 'strcmp' makes pointer from integer without cast

但是,它仍然有效,直到用戶輸入

現在輸出:

How Many names will be inputed? 3
Angelia Kho
Angel
Angelina

--------------------------------
Process exited after 23.08 seconds with return value 3221225477
Press any key to continue...

對於像這樣的初學者電話

scanf("%c", &ignore);

是多余的。 您可以刪除它們並更改 scanf 的調用以通過以下方式輸入字符串

scanf( " %254[^\n]", names[j] );
       ^^^

注意格式字符串中的前導空格。 它允許跳過空白字符,例如在前面調用scanf之后存儲在輸入緩沖區中的換行符'\n'

在 if 語句中

if(strcmp(names[i], names[j]> 0))

有一個錯字。 表達式names[j] > 0具有int類型並且等於 1。

你必須寫

if(strcmp(names[i], names[j] ) > 0 )

這個printf調用中的另一個錯字

printf("%d. %[^\n]", i, names[i]);

像這樣改寫

printf("%d. %s\n", i, names[i]);

此外,使用的排序方法不是冒泡排序方法。 它看起來像帶有冗余交換的選擇排序方法。

暫無
暫無

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

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