C程序不会以升序排列数字

时间:2019-01-21 16:42:25

标签: c arrays scanf

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

这是完整的代码:

#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 个答案:

答案 0 :(得分:0)

这是因为您有一个;那里:

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;
        }
    }
}

答案 1 :(得分:0)

for(externe=0; externe<LENGHT-1; externe++); // I needed to remove the semicolon.

这确实是我的错字。指令末尾添加的分号阻止了指令获得所需的效果。 C语言中的分号本身就是一条指令,即使为空。因此,IDE(集成开发环境)只是将我的指令与模块的其余部分分开。防止数字按升序排列。