它告诉我有一个错误。对我来说这是指针或结构的问题,但我不确切知道。
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
typedef struct
{
char luogo[20];
float valore;
}rilevazione;
void BubbleSort(float valore[], int n);
int main()
{
int i=0, n=0, j=0;
rilevazione*dato=NULL;
dato=(rilevazione*)malloc(MAX*sizeof(rilevazione));
while(i<MAX)
{
printf("inserisci luogo %d: ", i+1);
scanf("%s", dato[i].luogo);
printf("inserisci valore %d: ", i+1);
scanf("%f", &dato[i].valore);
if(strcmp(dato[i].luogo, "end")==0) break;
i++;
}
n=i;
printf("il numero di misure e' %d", n);
scanf("%d", &n);
BubbleSort(dato.valore, n);
for(j=0; j<n; j++)
{
printf("valore: %d luogo: %s", dato[i].valore, dato[i].luogo);
}
return 0;
}
void BubbleSort(float valore[], int n)
{
int i=0, temp=0, j=0;
int scambi=1;
while(i<=n && scambi!=0)
{
scambi=0;
j=n;
while(j>=i)
{
if(valore[j]>valore[j+1])
{
temp=valore[j];
valore[j]=valore[j+1];
valore[j+1]=temp;
scambi=1;
}
j=j-1;
}
i=i+1;
}
return;
}
答案 0 :(得分:0)
你的BubbleSort需要一个float
的数组,但你正试图只传递一个float
而不正确。 dato.valore
没有任何意义。 dato[n].valore
。你看到了区别吗?
选择:
最后一个选择是大多数图书馆如何处理这个问题。
答案 1 :(得分:0)
这可能是因为当你这样做的时候
BubbleSort(dato.valore, n);
你缺少dato中的索引...这是一个指针。
所以你需要像dato [XXX] .valore。
这样的东西答案 2 :(得分:0)
rilevazione*dato=NULL;
dato=(rilevazione*)malloc(MAX*sizeof(rilevazione));
更改为
rilevazione *dato;
dato=(rilevazione*)malloc(MAX*sizeof(rilevazione));
if (dato == NULL) { error in malloc'ing data array...
始终检查内存分配的结果。我不确定C是否会在它们全部卡在一起时识别指针声明 - 更好的是安全并在那里留一个空格。
由于 dato 是一个数组(实际上是指向数组的指针),我怀疑你对BubbleSort()的调用并不满足于将其视为标量结构。你将不得不将整个结构数组传递给BubbleSort并将函数内的valore组件分开。
我会假设冒泡排序的使用仅仅是偶然的,对于真正的生产代码,你可以使用更快的运行速度。
答案 3 :(得分:0)
这可能是因为当你这样做的时候
BubbleSort(dato.valore, n);
你缺少dato中的索引...这是一个指针,所以它需要一个索引。
所以你需要像dato [index] .valore。
这样的东西