如何从这个文本列表中取第一行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从这个文本列表中取第一行?相关的知识,希望对你有一定的参考价值。

我有一个包含文本的列的列表,但我只是想从这个列表中取第一个上行。如何做到这一点?

#include <stdio.h>

int main()
{
  FILE *fr;
  char c;
  fr = fopen("prog.txt", "r");
  while( c != EOF)
  {
    c = fgetc(fr); /* read from file*/
    printf("%c",c); /*  display on screen*/
  }
  fclose(fr);
  return 0;
}
答案

你的停止条件是 EOF所有的东西都会被读到文件的最后,你需要的是读到找到换行符为止,此外,你还需要在文件中加入一个新的字符。EOF (-1)应与 int 类型。

你需要这样的东西。

#include <stdio.h>
#include <stdlib.h>

int main()
{
  FILE *fr;
  int c;

  if(!(fr = fopen("prog.txt", "r"))){ //check file opening
    perror("File error");
    return EXIT_FAILURE; 
  }

  while ((c = fgetc(fr)) != EOF && c != '\n')
  {
    printf("%c",c); /*  display on screen*/
  }
  fclose(fr);
  return EXIT_SUCCESS;
}

这是在尊重你的代码读行 charchar,你也有库函数允许你读取整行,如 fgets() 对于一个可移植的代码。getline() 如果你不是在Windows上或者 下载便携式版本当然,你也可以自己做,比如说 这个这个.

另一答案

不管它的价值是什么,这里有一个使用了 航线

#include <stdio.h>

int main()
{
  FILE *fr;
  char *line = NULL;
  size_t len = 0;
  ssize_t nread;

  if (!(fr = fopen("prog.txt", "r"))) {
    perror("Unable to open file");
    return 1;
  }
  nread = getline(&line, &len, fr);
  printf("line: %s, nread: %ld\n", line, nread);

  fclose(fr);
  return 0;
}

一些注意事项。

  • getline() 如果你愿意,可以自动分配你的读取缓冲区。
  • getline() 返回行末定界符。 如果你不需要它,你可以随时把它去掉。
  • 它是 总是 检查像 "fopen() "这样的IO调用的状态是个好主意。
另一答案

只需将EOF替换为'\n'(new line char)。这样你的代码就会一直读到新的行。这就是它的样子。

#include <stdio.h>
int main()
{
  FILE *fr;
  char c = ' ';
  fr = fopen("prog.txt", "r");
  while(c != EOF && c != '\n')
  {
    c = fgetc(fr); /* read from file*/
    if(c != EOF){
          printf("%c",c); /*  display on screen*/
    }
  }
  fclose(fr);
  return 0;
}

我还没有测试过,但可能会成功. 请让我知道,如果有一些问题的代码,我会编辑它。

编辑1:第5行的char c; 初始化为'',用于处理UB。

Edit2:在第7行的while循环中加入条件(c != EOF),以避免给无限循环一个理由。

Edit3:在第10行中添加if语句,因为不打印EOF,这可能是产生奇怪结果的原因。

以上是关于如何从这个文本列表中取第一行?的主要内容,如果未能解决你的问题,请参考以下文章

OnItemClick 如何从列表视图中获取单击项目的文本值

以之字形方式连接字符串列表的算法

从列表视图中删除一行后刷新片段

shell 脚本里面从一个文本里面读出一个数字,如何转换成整数?我需要用这个数字进行加减乘除

pandas 如何对上千万数据分组“快速”取第一行和最后一行

如何在文本区域标签中的特定光标位置插入选择标签下拉值作为文本片段?