[英]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.