【问题标题】:Reading a file into a Linked List in C将文件读入 C 中的链表
【发布时间】:2015-02-08 00:13:23
【问题描述】:

我在使用 C 编程语言的代码的某个方面遇到问题。这是手头的问题。我必须读入格式如下的文件:

q    99  
z    8  
q    4

每行以 q 或 z 开头,后跟一个制表符,然后是一个数字。我只想将第 q 行开始的数字存储在链表中。

我能够隔离以 q 开头的行,但我的代码将值 99 分成两个单独的节点 9 和 9。我不知道如何解决这个问题。

任何有建设性的帮助都会很棒,并且友善,我是 C 语言的新手!

// Beginning of code reads the file in, and provides structure and
// function declarations
struct node *start = NULL;
char w;

while((w = fgetc(filep))!= EOF ) //filep is pointer to the file
{
    if(w=='z')
        break;
    else if(isdigit(w))
        push(&start, w); //push function creates the nodes
}

// rest of code has function definitions of push and print, creating
// and printing the linked list

【问题讨论】:

  • 这是因为你得到了单个字符。我建议您阅读fgetssscanf
  • char w; -->> int w; ... 首先..

标签: c file linked-list


【解决方案1】:

您当前正在逐字阅读。 "99" 由两个字符组成。

解决此特定问题的一个简单方法是使用旨在解析格式化输入的函数,例如scanf()。 这是一个如何使用它的示例:

while (true) {
    char w;
    int v;

    int count = scanf(" %c %d", &w, &v);
    if (count != 2)
        break;

    if (w == 'q')
        push(&start, v);
}

请注意,在格式字符串中,我包含了一个前导空格。这将确保在我们到达%c 之前,我们会使用任何前导空格。此空格将包括前一行的尾随换行符。

【讨论】:

  • 啊,是的,谢谢。我明白你的逻辑了!我想知道是否有任何建议可以用作 while 循环的条件。我很难想出正确的方法,因为 fgetc 让我误入歧途。我一直在尝试对 EOF 使用不同的条件语句,但编译器还不满意。
  • 我目前正在使用带有 break 的内部测试来结束 while 循环。
  • 嗯,对不起,我好像没跟上。事实似乎给编译器带来了一些问题。当我尝试运行 while 循环时,错误:“未声明的首次使用此函数”错误出现在这一行。你知道可能是什么问题吗?感谢您耐心地帮助新手 C 程序员。
  • 您应该可以将 true 替换为 1 或包含 stdbool.h。
  • 循环现在运行,但它是无限的。这就是为什么我想改变条件,让它最终到达文件的末尾。出了点问题,我不确定它可能是什么。
猜你喜欢
  • 2021-09-25
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 2017-11-18
相关资源
最近更新 更多