首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C中使用结构将文本读入链表

在C中使用结构将文本读入链表
EN

Stack Overflow用户
提问于 2015-06-29 13:33:42
回答 1查看 146关注 0票数 1

我正在尝试使用txt文件中的struct创建一个链表。最初,我使用一个只包含一行信息的txt文件对其进行测试。这段代码可以正确编译,但是当我运行它时,它会返回“行...没有正确扫描”。顺便说一句,如果我删除返回这样一个值的if语句,我会得到完全胡言乱语。我不知道为什么行没有被正确扫描,但我觉得这可能与我试图作为字符串扫描的两个术语中的连字符/加号有关。非常感谢您能提供的任何帮助。

这是txt文件:

代码语言:javascript
复制
1 20959U 90103A   14091.58762725 -.00000015  00000-0  00000+0 0  3197

这是tester.c文件:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct noradData {
    // line one
    int                lineNum;
    char             * satNum;
    char             * intDesig;
    float              epoch;
    float              firstTimeDeriv;
    char             * secondTimeDeriv;
    char             * drag;
    int                zero;
    int                set;
    struct noradData * next;
} Data; 

Data * first = NULL, * last = NULL;

int main() {
    char line[80], secondTimeDeriv[7], drag[7], satNum[6], intDesig[6];
    int lineNum, zero, set; 
    float epoch, firstTimeDeriv;

    FILE * fIn;
    Data * node;

    fIn = fopen("data1.txt", "r");
    if (fIn == NULL) {
        printf("Cannot open file\n");
        return 1;
    }

    while (fgets(line, sizeof(line), fIn) != NULL) {
        // Check line for various problems (too short, too long).
        if (line[0] == '\0') {
            printf ("Line too short\n");
            return 1;
        }

        if (line[strlen (line)-1] != '\n') {
            printf ("Line starting with '%s' is too long\n", line);
            return 1;
        }

        line[strlen (line)-1] = '\0';

        // Scan the individual fields.

        if (scanf("%d %s %s %f %f %s %s %d %d", &lineNum, satNum, intDesig, 
                &epoch, &firstTimeDeriv, secondTimeDeriv, drag, &zero, &set) 
                != 9) {
            printf ("Line '%s' didn't scan properly\n", line);
            return 1;
        }

        node = malloc(sizeof(Data));
        if (node == NULL) {
            printf ("Ran out of memory\n");
            return 1;
        }

        node->lineNum = lineNum;
        node->satNum = strdup(satNum);
        node->intDesig = strdup (intDesig);
        node->epoch = epoch;
        node->firstTimeDeriv = firstTimeDeriv;
        node->secondTimeDeriv = strdup(secondTimeDeriv);
        node->drag = strdup(drag);
        node->zero = zero;
        node->set = set;
        node->next = NULL;

        if (first != NULL) {
            last->next = node;
            last = node;
        }
        else {
            first = node;
            last = node;
        }
    }
    fclose (fIn);
    node = first;
    while (node != NULL) {
        printf("%d %s %s %f %f %s %s %d %d", node->lineNum, node->satNum, 
            node->intDesig, node->epoch, node->firstTimeDeriv, 
            node->secondTimeDeriv, node->drag, node->zero, node->set);
        node = node->next;
    }
    return 0;
}
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31108447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档