错误:请求成员'valore'不是结构或联合

时间:2013-12-11 19:17:49

标签: 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=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;
}

4 个答案:

答案 0 :(得分:0)

你的BubbleSort需要一个float的数组,但你正试图只传递一个float而不正确。 dato.valore没有任何意义。 dato[n].valore。你看到了区别吗?

选择:

  1. 从结构数组中创建一个浮点数组。
  2. 更新BubbleSort以对您已有的结构数组进行排序。
  3. 更新您的排序例程以获取函数指针,并为要排序的列表中的每个项调用该函数。
  4. 最后一个选择是大多数图书馆如何处理这个问题。

答案 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。

这样的东西
相关问题