Я новичок в программировании, и я пытаюсь создать программу, которая будет либо переставлять строку символов в алфавитном порядке, либо массив цифр в порядке возрастания, используя пузырьковую сортировку, чтобы проверить мои знания и понимание. Для этого я использовал функцию 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;
}
}
}
}
Я прошу прощения за мой шаткий английский и спасибо за ваше время.
Пузырьковая сортировка сравнивает соседние пары, но externe и numero не всегда являются соседними.
Не редактируйте, чтобы добавить «РЕШЕНО». Убедитесь, что есть хороший ответ (при необходимости сделайте его сами), а затем примите его.
Даже не нужен ответ, так как это простая опечатка - его можно просто закрыть
@ChrisTurner Не намереваясь на самом деле противоречить вам, я обнаружил, что иногда то, что опытному программисту кажется опечаткой, может быть непониманием «обычного синтаксиса» новичком, что заслуживает ответа.





это потому, что у вас есть ; там :
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;
}
}
}
Хотите добавить пояснение к своему ответу, состоящему только из кода? Почему удаление точки с запятой помогает?
for(externe=0; externe<LENGHT-1; externe++); // I needed to remove the semicolon.
Это действительно была опечатка с моей стороны. Добавленная точка с запятой в конце инструкции мешала инструкции иметь желаемый эффект. Одинокая точка с запятой в языке C сама по себе является инструкцией, даже если она пуста. Таким образом, IDE (интегрированная среда разработки) просто отделяла мою инструкцию от остального блока. Предотвращение расположения цифр в порядке возрастания.
Простая опечатка - у вас есть точка с запятой в конце внешнего цикла
for-for(externe=0; externe<LENGHT-1; externe++);