如何从这个文本列表中取第一行?
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;
}
这是在尊重你的代码读行 char
由 char
,你也有库函数允许你读取整行,如 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 脚本里面从一个文本里面读出一个数字,如何转换成整数?我需要用这个数字进行加减乘除