分享
为什么问答平台  ›  专栏  ›  技术社区  ›  Corentin

C程序不按升序排列数字 - C program wont arrange digits in ascending order

  •  2
  • Corentin  · 技术社区  · 5 月前

    我是一个编程初学者,我正在尝试创建一个程序,该程序可以按字母顺序重新排列字符串,也可以使用冒泡排序法按升序排列一组数字,以测试我的知识和理解。 我使用了scanf()函数,以及两个不同的函数来表示字母表或字符串。当字母表一按预期工作时,数字一只是不按升序重新排列数字,我不知道为什么。

    以下是完整代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define TAILLE 26
    #define LENGHT 6
    
    void croissant(char alphabet[]);
    void ascend(int numero[]);
    
    int main()
    {
        int x, r;
        int numero[] = { 6, 3, 2, 4, 5, 1 };
        char alphabet[] = "azertyuiopqsdfghjklmwxcvbn";
    
        printf("Pour remettre l'alphabet dans l'ordre, tapez 1 : \n\n%s\n\n\n", 
    alphabet);
        printf("Pour remettre cette suite de chiffre dans l'ordre, tapez 2 : 
    \n\n");
        for(x=0; x<LENGHT; x++)
        {
        printf("%d\t", numero[x]);
        }
        putchar('\n');
        scanf("%d", &r);
        if(r == 1)
        {
            croissant(alphabet);
            printf("Voila : %s", alphabet);
        }
        else if(r == 2)
        {
            printf("Voila ! : ");
            ascend(numero);
            for(x=0; x<LENGHT; x++)
            {
                printf("%d\t", numero[x]);
            }
        }
        else
            puts("Je regrette, je n'ai pas compris.");
    
    
        return 0;
    }
    
    void croissant(char alphabet[])
    {
        int externe, interne, temp;
    
        for(externe=0; externe<TAILLE-1; externe++)
        {
            for(interne=externe+1; interne<TAILLE; interne++)
            {
                if(alphabet[externe] > alphabet[interne])
                {
                    temp = alphabet[externe];
                    alphabet[externe] = alphabet[interne];
                    alphabet[interne] = temp;
                }
            }
        }
    }
    
    void ascend(int numero[])
    {
        int temp, externe, interne;
    
        for(externe=0; externe<LENGHT-1; externe++);
        {
            for(interne=externe+1; interne<LENGHT; interne++)
            {
                if(numero[externe] > numero[interne])
                {
                    temp = numero[externe];
                    numero[externe] = numero[interne];
                    numero[interne] = temp;
                }
            }
        }
    }
    

    我为我不稳定的英语道歉,谢谢你的时间。

    2 回复  |  直到 5 月前
        1
  •  0
  •   Adam    5 月前

    因为你有一个;那里:

    for(externe=0; externe<LENGHT-1; externe++); // remove the ; and it will work
    {
        for(interne=externe+1; interne<LENGHT; interne++)
        {
            if(numero[externe] > numero[interne])
            {
                temp = numero[externe];
                numero[externe] = numero[interne];
                numero[interne] = temp;
            }
        }
    }
    
        2
  •  0
  •   Corentin    5 月前
    for(externe=0; externe<LENGHT-1; externe++); // I needed to remove the semicolon.
    

    这确实是我的错别字。在指令末尾添加的分号a使指令无法达到预期效果。C语言中唯一的分号本身就是一条指令,即使是空的。因此,集成开发环境(integrated development environment)只是将我的指令与块的其余部分分离。防止数字按升序排列。