Программа C не упорядочивает цифры в порядке возрастания

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

Я прошу прощения за мой шаткий английский и спасибо за ваше время.

Простая опечатка - у вас есть точка с запятой в конце внешнего цикла for - for(externe=0; externe<LENGHT-1; externe++);

Chris Turner 21.01.2019 17:50

Пузырьковая сортировка сравнивает соседние пары, но externe и numero не всегда являются соседними.

Johnny Mopp 21.01.2019 17:57

Не редактируйте, чтобы добавить «РЕШЕНО». Убедитесь, что есть хороший ответ (при необходимости сделайте его сами), а затем примите его.

Yunnosch 21.01.2019 18:00

Даже не нужен ответ, так как это простая опечатка - его можно просто закрыть

Chris Turner 21.01.2019 18:01

@ChrisTurner Не намереваясь на самом деле противоречить вам, я обнаружил, что иногда то, что опытному программисту кажется опечаткой, может быть непониманием «обычного синтаксиса» новичком, что заслуживает ответа.

Yunnosch 21.01.2019 18:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
5
98
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

Хотите добавить пояснение к своему ответу, состоящему только из кода? Почему удаление точки с запятой помогает?

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

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

Другие вопросы по теме