分配中不兼容的类型

时间:2016-01-14 12:13:05

标签: c incomplete-type

我正在试图改组一组数组并按照混洗顺序打印它们,但是我得到error: incompatible types when assigning to type 'int' from type 'IRIS'并且我无法克服它。

我是一名初学程序员(过去一周刚刚学习了一些基础C进行大学考试)。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define MAX_SAMPLES 5
#define OUTPUT 3
typedef struct {
  double sepal_lenght;
  double sepal_width;
  double petal_lenght;
  double petal_width;
  double out[OUTPUT];
}IRIS;
IRIS samples[MAX_SAMPLES] = {
{5.1,2.5,3.0,1.1,{0.0,1.0,0.0}},
{6.7,3.1,5.6,2.4,{1.0,0.0,0.0}},
{6.4,3.1,5.5,1.8,{1.0,0.0,0.0}},
{7.6,3.0,6.6,2.1,{1.0,0.0,0.0}},
{7.7,2.8,6.7,2.0,{1.0,0.0,0.0}},
};
main (){
int i, temp, randomIndex;
srand(time(NULL));
  for ( i=1; i < MAX_SAMPLES; i++) {
   temp = samples[i];
   randomIndex = rand() %MAX_SAMPLES;
   samples[i] = samples[randomIndex];
   samples[randomIndex] = temp;
}
for ( i=0; i<MAX_SAMPLES; i++) {
  printf("%d\n", samples[i]);
}
}
行中出现

错误:temp = samples[i];

任何非常有用的帮助!

3 个答案:

答案 0 :(得分:2)

在循环前从temp列表中删除int,然后更改:

temp = samples[i];

为:

const IRIS temp = samples[i];

您无法将IRIS类型的值分配给int

答案 1 :(得分:1)

您正在声明一个IRIS类型的数组,但在您的for循环中,您使用的是%d,它们仅用于在printf中显示int。 如果要显示结构IRIS中的数据,则必须访问要显示的属性,而不是结构本身。 例如:

printf("%f\n", samples[i].sepal_lenght);

答案 2 :(得分:0)

temp类型为intsamples数组为IRIS,因此您需要tempIRIS,然后将samples[i]的所有内容复制到其中。