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