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