让我们从一道例题来分析,分析我都写在注释里面了。
例:编写一个程序,以一个字符和任意文件名作为命令行参数。然后输出字符所在行内容。(此题目是我为了讲解而自己想的,若有不足之处请多指教)
代码如下:
#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;
}
因为每个人的需求不一样,所以这个例子希望能够给你们一些启发,觉得还不错的话,麻烦给点个赞吧。