c - 排序功能不起作用,模拟无法继续

标签 c

我正在尝试创建一个排序函数来对浮点值不兼容指针的顺序进行排序。当你运行代码时,在输入指向数组的大小并输入值后,运行就停止了。不知道问题出在哪里,哪位高手帮忙解答一下。 我已经纠正了警告,但现在仍然是运行代码的结果

#include <stdio.h>
#include <stdlib.h>

void sort(const int size, float *input, float *output);


int main(void) {
    int a;

    float *b=&b1;

    float *c=&c1;
    int i, i1;

    printf("input the size\n");
    scanf("%d", &a);
     b=(float*)malloc(sizeof(int)*a);
     c=(float*)malloc(sizeof(int)*a);
    for(i=0; i<a ; i++){
        scanf("%f", &b[i]);

    }
    for(i1=0; i1<a; i1++){
        c[i1]=b[i1];
        printf("%f\n", c[i1]);
    }

    sort(10, b, c);
    free(b);
    free(c);
    return 0;
}

void sort(const int size, float *input, float *output)
{
    void swap( float *element1Ptr,  float *element2Ptr);
    int pass;
    int j;
    int i0;

    for (pass=0; pass<size-1;pass++)
    {
        for (j=0; j<size-1;j++){
            if(input[j]>input[j+1]){

            swap(&input[j], &input[j+1]);
            }

        }
    }


    for (i0=0; i0<size; i0++){
        output[i0]=input[i0];
        printf("%f", output[i0]);
    }

}

void swap( float *element1Ptr,  float *element2Ptr)
{
float hold=*element1Ptr;
*element1Ptr=*element2Ptr;
*element2Ptr=hold;
}

最佳答案

您的代码中存在一些错误。

没有为c分配内存。

您修改了sort中的输入数组。

一个打印循环循环到 10。

此外,我还稍微清理了格式。

我移动了前向声明,使其位于排序函数之外。这不是一个错误,但程序员希望将前向声明放在任何函数之外。

我删除了不必要的 printf 语句并仅打印排序后的数组。

#include <stdio.h>
#include <stdlib.h>

void sort(const int size, const float *input, float *output);
void swap( float *element1Ptr,  float *element2Ptr);


int main(void) {
    int a;
    float *b;
    float *c;
    int i, i1;

    printf("input the size\n");
    scanf("%d", &a);
    b = malloc(sizeof(float)*a);
    c = malloc(sizeof(float)*a);

    for(i=0; i<a ; i++){
        scanf("%f", &b[i]);
    }
    sort(a, b, c);

    for(i1=0; i1<a; i1++){
        printf("%f\n", c[i1]);
    }

    free(b);
    free(c);
    return 0;
}

void sort(const int size,  float const *input, float *output)
{
    int pass;
    int j;
    int i0;

    for (i0=0; i0<size; i0++){
        output[i0]=input[i0];
    }

    for (pass=0; pass<size-1;pass++)
    {
        for (j=0; j<size-1;j++){
            if(output[j]>output[j+1]){
                swap(&output[j], &output[j+1]);
            }
        }
    }
}

void swap( float *element1Ptr,  float *element2Ptr)
{
    float hold=*element1Ptr;
    *element1Ptr=*element2Ptr;
    *element2Ptr=hold;
}

一般建议:

调高编译器的警告级别。编译器警告的存在是有原因的。

关于c - 排序功能不起作用,模拟无法继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25620690/

相关文章:

谁能解释一下括号里面写的是什么意思?

c - fork() 之后创建的子进程的父 pid_t

c - 管道在 Linux 中是如何工作的?

python - 如何在 C 语言中使用经过训练的图形文件

c - ICU 和 UTF-8 字符串的基本操作

c - 为什么这个程序没有段错误?

谁能告诉我如何实现差分定时器的概念

c - 查看可执行二进制文件的链接器 'uses' 的确切内存范围

c - 双向链表上的 FOR 循环不返回最后一个元素。反过来会出现段错误

c++ - 使用 fork 在两个进程之间逐个字符地发送字符串