【问题标题】:C program wont arrange digits in ascending orderC程序不会按升序排列数字
【发布时间】:2019-01-21 16:42:25
【问题描述】:

我是编程初学者,我正在尝试创建一个程序,该程序将使用冒泡排序重新排列按字母顺序排列的字符串或按升序排列的数字数组,以测试我的知识和理解。 我为此使用了函数 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&lt;LENGHT-1; externe++);
  • 冒泡排序比较相邻的对,但externenumero 并不总是相邻的。
  • 不要编辑添加“已解决”。确保有一个好的答案(必要时自己做),然后接受它。
  • 甚至不应该需要答案,因为这是一个简单的错字 - 它可以被关闭
  • @ChrisTurner 无意与您实际相矛盾,我发现有时对于有经验的程序员来说看起来像是拼写错误的东西可能是初学者对“常用语法”的误解,这是值得回答的。

标签: c arrays scanf


【解决方案1】:

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

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

【讨论】:

  • 您想为您的纯代码答案添加解释吗?为什么删除分号有帮助?
【解决方案2】:
for(externe=0; externe<LENGHT-1; externe++); // I needed to remove the semicolon.

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

【讨论】:

    猜你喜欢
    • 2011-08-28
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2017-03-08
    相关资源
    最近更新 更多