С программа не расположит цифры в порядке возрастания - PullRequest
0 голосов
/ 21 января 2019

Я новичок в программировании, и я пытаюсь создать программу, которая будет либо переставлять строку символов в алфавитном порядке, либо массив цифр в порядке возрастания, используя сортировку пузырьков для проверки моих знаний и понимания.Для этого я использовал функцию 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 ]

0 голосов
/ 21 января 2019
for(externe=0; externe<LENGHT-1; externe++); // I needed to remove the semicolon.

Это была действительно опечатка с моей стороны.Добавленная точка с запятой в конце инструкции препятствовала тому, чтобы инструкция имела желаемый эффект.Одиночная точка с запятой в языке C сама по себе является инструкцией, даже если она пустая.Таким образом, IDE (интегрированная среда разработки) просто отделяла мою инструкцию от остальной части блока.Предотвращение расположения цифр в порядке возрастания.

0 голосов
/ 21 января 2019

это потому что у вас есть;там:

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