我是编程的初学者,我正在尝试创建一个程序,该程序将使用冒泡排序来测试我的知识和理解力,或者以字母顺序重新排列字符串或以升序排列数字数组。 我为此使用了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;
}
}
}
}
我为我英语差劲而道歉,并感谢您的宝贵时间。
答案 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(集成开发环境)只是将我的指令与模块的其余部分分开。防止数字按升序排列。