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++。