C 错误:请求成员';瓦洛雷';在非结构或联盟中
它告诉我有一个错误。对我来说,这是一个指针的问题,或者是关于结构的问题,但我不太清楚C 错误:请求成员';瓦洛雷';在非结构或联盟中,c,pointers,C,Pointers,它告诉我有一个错误。对我来说,这是一个指针的问题,或者是关于结构的问题,但我不太清楚 #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
#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;
}
#包括
#包括
#定义最大值100
类型定义结构
{
查罗戈[20];
浮谷;
}赖尔瓦锡安;
void BubbleSort(float valore[],int n);
int main()
{
int i=0,n=0,j=0;
rilevazione*dato=NULL;
dato=(rilevazione*)malloc(最大*尺寸(rilevazione));
虽然(i您的BubbleSort接受一个float
s数组,但您尝试只传递一个float
,而且也不正确。dato.valore
没有意义。dato[n]。valore
有。您看到区别了吗
选择:
从结构数组创建浮点数组
更新BubbleSort以对已有的结构数组进行排序
更新排序例程以获取函数指针,并为列表中要排序的每个项调用函数
最后一个选择是大多数库如何处理这个问题。这可能是因为
BubbleSort(北卡罗来纳州达托·瓦洛雷);
dato中缺少一个索引…它是指针
所以你需要像dato[XXX].valore这样的东西
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组件
我假设冒泡排序的使用只是偶然的,对于真正的生产代码,您应该使用运行速度稍快一点的东西。这可能是因为当您使用冒泡排序时
BubbleSort(北卡罗来纳州达托·瓦洛雷);
dato中缺少一个索引…这是一个指针,因此它需要一个索引
所以你需要像dato[index]这样的东西.valore.在哪一行报告此错误?您在代码的哪一行得到错误?欢迎这样做。您的问题不是很好的编校质量。请将问题代码简化为一个最小的示例。缩进代码以使其可读。请首先告诉我们报告错误的行。对不起,我想编辑,但错了只需输入一个新答案。[新stackoverflow用户…]不,在其中放入索引只会传递一个结构或一个结构中的一个元素,这对排序没有意义。您需要将整个数组传递给排序函数,并处理每个元素作为结构而不是标量的复杂性。@user3092558,从我的列表中选择一个选项并发布一些更新的代码。我更改了,但它是sam问题BubbleSort(dato[i].valore,n);@user3092558,dato[i].valore表示数组的数据成员valore中的第i项。您看到了要求对一个条目进行排序的方法不起作用了吗?您所做的操作相当于BubbleSort(3.14,n)
欢迎来到programming@user3092558。它有时会让人不知所措。诀窍是想出一些小步骤来取得胜利。问问自己,如果这段代码100%有效,那么什么应该BubbleSort
作为输入并作为输出返回。好的,在BubbleSort
几乎有效的地方工作之前的步骤是什么你缺少一个部分吗?继续向后走,最终你会在正确的位置结束。bubbleSort将结构作为输入…作为输出,我会出错…我不知道问题是在void bubbleSort(float valore[],int n)还是在bubbleSort(dato.valore,n)中在调用<代码> MaloC/<代码>之前,请删除该转换。这是C++而不是C++。