C语言中的冒泡排序输出问题
我目前正在学习C教科书中关于指针数组/字符串解引用的一章。它提供了对字符串进行冒泡排序的示例。每次我运行它时,它不会按字母顺序升序输出字符串,包括字符串的每个字符。我一直在重读代码以找出错误所在,但找不到它。以下是教科书提供的输出源:C语言中的冒泡排序输出问题,c,arrays,pointers,C,Arrays,Pointers,我目前正在学习C教科书中关于指针数组/字符串解引用的一章。它提供了对字符串进行冒泡排序的示例。每次我运行它时,它不会按字母顺序升序输出字符串,包括字符串的每个字符。我一直在重读代码以找出错误所在,但找不到它。以下是教科书提供的输出源: #include <stdio.h> #define SIZE 8 int main() { const char *name[] = { "Mickey", "Minnie", "D
#include <stdio.h>
#define SIZE 8
int main()
{
const char *name[] =
{
"Mickey",
"Minnie",
"Donald",
"Daisy",
"Goofy",
"Chip",
"Dale",
"Pluto"
};
const char *temp;
int x,a,b;
for(a=0; a<SIZE-1; ++a)
{
for(b=a+1; b<SIZE; ++b)
{
x=0;
while(*(*(name+a)+x))
{
if(*(*(name+a)+x) > *(*(name+b)+x))
{
temp = *(name+a);
*(name+a) = *(name+b);
*(name+b) = temp;
break;
}
else if(*(*(name+a)+x) < *(*(name+b)+x))
{
break;
}
else
{
x++;
}
}
}
for(x=0; x<SIZE; ++x)
{
printf("%s\n",*(name+x));
}
return(0);
}
}
仅供参考,对于任何指针或数组
a
和索引i
,表达式*(a+i)
完全等于a[i]
。请注意,a[i]
更容易阅读和理解,也更容易编写。因为您有一个编译器,所以您应该有一个可以用来测试它的IDE。尝试单步通过它,我怀疑这将显示错误所在。否。我怀疑你抄写课本上的代码时有错误。--编辑-用户202729抢先告诉我。:)格式化后,错误很明显:输出在第一次运行外部循环之后-太早了。输出回路必须移到外回路之外。如果您不想使用IDE,那么我强烈建议您熟悉gdb
。它可以在shell中使用,而不需要任何GUI chicky micky-它需要一点时间来使用,但它与任何可视化调试器一样强大。另一方面,在使用了WinDbg和VS之后,我不想再使用gdb
/dbx
。(我显然对前者上瘾了……)