0

我正在用 C 语言做一个项目,偶然发现了一些问题,希望你们能帮助我!该项目只是操纵用户通过标准输入创建的坐标点。我在下面包含了不同的文件及其功能;

//points.h
struct Point{
   int x;
   int y;
}

//reads points from stdinput into our points array
int pointReader(struct Point points[]);

///////////////

//points.c
void pointReader(struct Point points[]){
   //points[] is originally empty array (filled with NULLS)
   struct Point point;
   char buffer[10];
   printf("X Coordinate:");
   fgets(buffer, 10, stdin);
   point.x = (int)buffer;
   printf("Y Coordinate:");
   fgets(buffer, 10, stdin);
   point.y = (int)buffer;
   append(points, point);    
}

static void append(struct Point points[], struct Point point){
   int i;
   for (i = 0; i < 10; i++){
      if (points[i] == NULL){
         points[i] = point;
}    

编译后,我收到以下错误,我不太清楚为什么:

points.c:115:10: error: invalid storage class for function 'append'
points.c: In function 'append':
points.c:127:17: error: invalid operands to binary == (have 'struct Point' and 'void *')

points[]另外,我可以像我试图做的那样轻松地在阵列周围“折腾”吗?

感谢您的任何评论!

4

1 回答 1

2

第一个错误很可能append是因为您在调用它之前没有声明该函数。在调用之前添加一个函数原型。换句话说,在pointReader定义之前,添加以下行:

static void append(struct Point points[], struct Point point);

第二个错误是因为points数组中的值不是指针,因此不能像指针一样对待(比如将它与 比较NULL)。您必须使用另一种方法来检查是否使用了数组中的条目。例如使用xy-1或类似的东西。


您还有另一个问题,那就是您不能仅通过强制转换将字符串转换为整数。你必须使用一个函数,例如strtol

point.x = (int) strtol(buffer, NULL, 10);
于 2013-10-06T11:37:22.727 回答