【问题标题】:How to read the next line in a text file in C如何在C中读取文本文件中的下一行
【发布时间】:2020-11-26 20:34:54
【问题描述】:

我正在尝试读取文本文件中的下一个新行并将其放入一个数组中,我能够将第一行放入一个数组中。但是我想将文本文件中的每一行放入单独的数组中,有没有办法跳转到文本文件中的下一行?

代码:

while(((ch = getc(file1))!= '\n') && (i < 30))
{
    day1_array[i] = ch;

    printf("%c",ch);


}

提前致谢。

【问题讨论】:

  • i 不会在您的代码中更改
  • 阅读fgets函数
  • man getc: fgetc()、getc() 和 getchar() 将读取的字符作为无符号字符强制转换为文件末尾的 int 或 EOF 或错误。。也就是说,您可以继续阅读直到EOF。您可以声明一个二维数组来存储多行。此外,除非您需要使用 getc,否则更好的功能是 fgets 一次读取整行。
  • 这能回答你的问题吗? Reading text file into an array of lines in C

标签: c


【解决方案1】:

做这样的事情:

while (fgets(buf, MAX_LEN - 1, fp))
{
    printf("%s", buf);
}

其中 buf 是某个字符数组,MAX_LEN 是最大预期行长度,fp 是文件指针。函数 fgets 读取直到读取 (n-1) 个字符、读取换行符或到达文件末尾。一定不能按这个顺序,基本上先到先得

【讨论】:

  • "expected line length" --> 你会考虑"123\n" 一个长度为3 或4 的行吗? C lib 有“每一行由零个或多个字符加上一个终止换行符组成。”
  • 使用sizeof bufMAX_LEN - 1 更不容易出错。要读取"123\n",数组的大小至少应为 5。
  • 我认为你可能在这个问题上错了。转义字符不是两个字节,只是一个。因此,要阅读您的示例,我们只需要四个而不是五个字节,包括换行符。尽管我同意, sizeof(buf) 在这里可能是一个更好的选择,但是在我看来,这个答案仍然可以满足所提出的问题。如果您不同意,我们可以讨论并进行修改以使其更好!
  • " 阅读你的例子,我们只需要四个而不是五个字节" --> fgets() 需要至少 5 个字节的缓冲区来完全读取和保存由 4 个键组成的行 @987654327 @、'2''3''\n'。将其保存为带有'1''2''3''\n''\0' 的字符串。使用MAX_LEN - 1,其中MAX_LEN 是一行的长度(上面"123\n" 中的4),应该是MAX_LEN + 1 以提供所需的5,并且需要buf[/* at least */ MAX_LEN+1]
猜你喜欢
  • 1970-01-01
  • 2017-08-25
  • 2013-11-04
  • 1970-01-01
  • 2011-03-06
  • 2016-08-17
  • 2019-02-03
  • 1970-01-01
  • 2020-03-15
相关资源
最近更新 更多