C 错误中的 Printf 链表
Printf linkedList in C Errors
我正在尝试从文件中读取数据。文件的每一行包括:string1 string2 float
例如:A1 A2 5.22
我试图将链表的第一个元素的值打印到屏幕上,但每次我都得到错误:
在 "program.c" 文件中 -
错误:请求成员 "weight" 不是结构或联合
printf("%f", data -> weight);
或
在 "main.c" 文件中 -
错误:取消引用指向不兼容类型的指针
printf("%f\n", data ->weight);
也许有人可以帮我将会员数据输出到屏幕上。问题出在哪里,我该如何纠正?因为我尝试阅读有关该主题的其他答案,尝试不同的变体,但 "data" 成员没有任何效果。
已编辑:我通过更改解决的问题:
typedef struct node* 节点;
到
typedef 结构节点节点;
但是 "main.c" 的错误:
错误:取消引用指向不兼容类型的指针
仍然存在。也许有人知道如何更正我的代码?
编辑代码:
main.c
#include <stdio.h>
#include <stdlib.h>
#include "program.h"
int main(int argc, char *argv[] ){
if(argc != 3){return 0;}
node* data;
data = getData(argv ,&data);
printf("%f \n", data -> weight); //here second mentioned error appears
return 0;
}
program.h
#ifndef program_h
#define program_h
#include <stdio.h>
#include <stdlib.h>
#include "program.h"
typedef struct node node;
node* getData (char* argv[], node** data);
#endif
program.c
#include "program.h"
struct node
{
char* from;
char* to;
float weight;
struct node *next;
};
node* getData (char* argv[], node** data){
node* elem;
node* lastElem;
FILE *in=fopen(argv[1], "r");
if (in == NULL) {
fprintf(stderr, "Can't open input file !\n");
exit(1);
}
char* string1 = (char*)malloc(100*sizeof(char));
char* string2 = (char*)malloc(100*sizeof(char));;
float dataW; // dataWeigth
fscanf(in, "%s" ,string1);
fscanf(in, "%s" ,string2);
lastElem = malloc( sizeof(struct node));
lastElem -> next = NULL;
lastElem -> from = string1;
*data = lastElem;
printf("%f",(*data)->weight);
if(!feof(in)){
fscanf(in, "%f%*[^\n]" ,&dataW);
lastElem -> to = string2;
lastElem -> weight = dataW;
while (!feof(in))
{
fscanf(in, "%s" ,string1);
fscanf(in, "%s" ,string2);
fscanf(in, "%f%*[^\n]" ,&dataW);
elem = malloc( sizeof(struct node));
elem -> next = NULL;
elem -> from = string1;
elem -> to = string2;
elem -> weight = dataW;
lastElem -> next = elem;
lastElem = elem;
}
}
fclose(in);
return *data;
}
嗯..我看不到 program.c 在 main.c 或 program.h
中的任何地方链接
因为它应该在那里执行结构。
.
.
和..
没有您将 "data" 定义为结构的地方。
因为它应该是一个
struct node* data;
或
node* data;
在函数中调用任何东西都不能使那个东西成为结构..
改变
struct node
{
char* from;
char* to;
float weight;
struct node *next;
};
到
typedef struct
{
char* from;
char* to;
float weight;
struct node *next;
} node;
将其移至 program.h
,并且不包括 program.h
本身 - 这没有意义。相反,将其包含在 main.c
和 program.c
.
中
我正在尝试从文件中读取数据。文件的每一行包括:string1 string2 float 例如:A1 A2 5.22 我试图将链表的第一个元素的值打印到屏幕上,但每次我都得到错误:
在 "program.c" 文件中 - 错误:请求成员 "weight" 不是结构或联合
printf("%f", data -> weight);
或 在 "main.c" 文件中 - 错误:取消引用指向不兼容类型的指针
printf("%f\n", data ->weight);
也许有人可以帮我将会员数据输出到屏幕上。问题出在哪里,我该如何纠正?因为我尝试阅读有关该主题的其他答案,尝试不同的变体,但 "data" 成员没有任何效果。
已编辑:我通过更改解决的问题:
typedef struct node* 节点;
到
typedef 结构节点节点;
但是 "main.c" 的错误: 错误:取消引用指向不兼容类型的指针 仍然存在。也许有人知道如何更正我的代码?
编辑代码:
main.c
#include <stdio.h>
#include <stdlib.h>
#include "program.h"
int main(int argc, char *argv[] ){
if(argc != 3){return 0;}
node* data;
data = getData(argv ,&data);
printf("%f \n", data -> weight); //here second mentioned error appears
return 0;
}
program.h
#ifndef program_h
#define program_h
#include <stdio.h>
#include <stdlib.h>
#include "program.h"
typedef struct node node;
node* getData (char* argv[], node** data);
#endif
program.c
#include "program.h"
struct node
{
char* from;
char* to;
float weight;
struct node *next;
};
node* getData (char* argv[], node** data){
node* elem;
node* lastElem;
FILE *in=fopen(argv[1], "r");
if (in == NULL) {
fprintf(stderr, "Can't open input file !\n");
exit(1);
}
char* string1 = (char*)malloc(100*sizeof(char));
char* string2 = (char*)malloc(100*sizeof(char));;
float dataW; // dataWeigth
fscanf(in, "%s" ,string1);
fscanf(in, "%s" ,string2);
lastElem = malloc( sizeof(struct node));
lastElem -> next = NULL;
lastElem -> from = string1;
*data = lastElem;
printf("%f",(*data)->weight);
if(!feof(in)){
fscanf(in, "%f%*[^\n]" ,&dataW);
lastElem -> to = string2;
lastElem -> weight = dataW;
while (!feof(in))
{
fscanf(in, "%s" ,string1);
fscanf(in, "%s" ,string2);
fscanf(in, "%f%*[^\n]" ,&dataW);
elem = malloc( sizeof(struct node));
elem -> next = NULL;
elem -> from = string1;
elem -> to = string2;
elem -> weight = dataW;
lastElem -> next = elem;
lastElem = elem;
}
}
fclose(in);
return *data;
}
嗯..我看不到 program.c 在 main.c 或 program.h
中的任何地方链接因为它应该在那里执行结构。 . . 和.. 没有您将 "data" 定义为结构的地方。 因为它应该是一个
struct node* data;
或
node* data;
在函数中调用任何东西都不能使那个东西成为结构..
改变
struct node
{
char* from;
char* to;
float weight;
struct node *next;
};
到
typedef struct
{
char* from;
char* to;
float weight;
struct node *next;
} node;
将其移至 program.h
,并且不包括 program.h
本身 - 这没有意义。相反,将其包含在 main.c
和 program.c
.