C语言怎么样从文件中读取特定的一行字符

让我们从一道例题来分析,分析我都写在注释里面了。
例:编写一个程序,以一个字符和任意文件名作为命令行参数。然后输出字符所在行内容。(此题目是我为了讲解而自己想的,若有不足之处请多指教)
代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//这个函数的返回值用来作为主函数中if语句是否输出
int has_ch(char ch, const char *line);
int main(int argc, char *argv[])
{
	FILE *fp;//文件指针
	char a;
	char b[256];//用来存储从文件中读取的内容,因为一行最大为能容纳256字符

	a = argv[1][0];//读取给定的字符
	//这个if语句用来判断文件是否已经打开,这条语句请不要缺少。
	//我们现在是以打开一个文件来做例子,文件请自行设置
	if ((fp = fopen(argv[2], "r")) == NULL){
		printf("文件没有被打开\n");
		exit(EXIT_FAILURE);//这条语句是退出程序的意思
	}
	//while循环条件的意思是从fp这个文件指针中最大能读取256个字符给b这个数组,
	//当然如果你文件中一行不够256个字符的话,fgets函数会因为读取到换行符
	//而结束,当读到文件结尾时fgets函数返回的NULL会退出循环。
	while (fgets(b,256,fp))
	{
//if语句通过has_ch函数的返回值来判断是否打印读取的字符,也就是通过这个函数
//来判断是否满足题目条件而打印字符。
		if (has_ch(a, b))
		//条件成立就打印读取到的一整行,不成立就开始下一行的判断
			fputs(b, stdout);
	}
	fclose(fp);//程序完成后也不要忘关闭文件哦,养成一个良好的习惯。
	return 0; 
}
int has_ch(char ch, const char *line)
{
//这个while循环通过指针的形式来遍历查到是否有特定的字符ch,有的话就返回1使
//if语句进行从而打印有特定字符的一行,而这一行没有特定字符就返回0跳过主函数
//的jf语句(ch是特定字符,line指针是主函数传过来的一行字符串)
	while (*line)
	if (ch == *line++)
		return 1;
	return 0;
}

因为每个人的需求不一样,所以这个例子希望能够给你们一些启发,觉得还不错的话,麻烦给点个赞吧。

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页