C,从文件读入结构

oze*_*ech 4 c structure file

几天来我一直在努力奋斗,我无法弄清楚为什么它不起作用.

我正在尝试从文件中读取带有这样的数字的数字:

0 2012 1 1 2000.000000
0 2012 1 1 3000.000000
1 2012 1 1 4500.000000
Run Code Online (Sandbox Code Playgroud)

我的结构:

struct element{

        int id;
        int sign;
        int year;
        int month;
        double amount;

        struct element *next;


};

struct queue{
    struct element *head;
    struct element *tail;
    struct element *head2; 
    struct element *temp;  
    struct element *temph; 

    int size;
};
Run Code Online (Sandbox Code Playgroud)

(head2,temp和temph用于排序结构)

并从文件中读取:

void read_str(struct queue *queue){

    FILE *reads;

    char filename[40];
    int temp;

    printf("Type in name of the file\n");
    scanf("%s",&filename);
    reads=fopen(filename, "r");
    if (reads==NULL) {
        perror("Error");
        return 1;
    }
    else { 
        while(!feof(reads)) {
            struct element *n= (struct element*)malloc(sizeof(struct element));             
            fscanf(reads,"%d %d %d %d %lf", n->id, n->sign, n->year, n->month, n->amount);                  
            n->next=NULL;                   

            if(queue->head ==NULL) {
                queue->head=n;
            }
            else {
                queue->tail->next=n;
            }

            queue->tail=n;
            queue->size++;                  

        }           
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以通过更改写入它的函数来更改数据在文件中的显示方式,但我认为这不是问题所在.我的猜测我用malloc的是错误的方式.

cni*_*tar 20

fscanf(reads,"%d %d %d %d %lf", n->id, n->sign, n->year, n->month, n->amount);
Run Code Online (Sandbox Code Playgroud)

scanf系列函数预期地址.将fscanf行更改为:

fscanf(reads,"%d %d %d %d %lf", &n->id, &n->sign, &n->year,
    &n->month, &n->amount);
Run Code Online (Sandbox Code Playgroud)

旁注,这是一个严重误导的路线:

else { while(!feof(reads)) {
Run Code Online (Sandbox Code Playgroud)

  • @ozech迟到的答案,但是你不应该使用feof()因为它只是在你试图读过文件末尾之后才返回false.可以只读入一个可能不是你想要的部分结构.您的循环也可能会执行额外的时间.您应该检查以查看fscanf返回的值是`> = sizeof(your_struct)`.这样你就知道你已经阅读了整个结构. (2认同)