C语言中的冒泡排序输出问题

C语言中的冒泡排序输出问题,c,arrays,pointers,C,Arrays,Pointers,我目前正在学习C教科书中关于指针数组/字符串解引用的一章。它提供了对字符串进行冒泡排序的示例。每次我运行它时,它不会按字母顺序升序输出字符串,包括字符串的每个字符。我一直在重读代码以找出错误所在,但找不到它。以下是教科书提供的输出源: #include <stdio.h> #define SIZE 8 int main() { const char *name[] = { "Mickey", "Minnie", "D

我目前正在学习C教科书中关于指针数组/字符串解引用的一章。它提供了对字符串进行冒泡排序的示例。每次我运行它时,它不会按字母顺序升序输出字符串,包括字符串的每个字符。我一直在重读代码以找出错误所在,但找不到它。以下是教科书提供的输出源:

#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
。(我显然对前者上瘾了……)