除去程序名本身,要求输入两个参数,分别为需要判定的字符,以及文件名。
思路:
1. 文件内容逐一判定,确定是否有该字符;
2.将文件字符串赋给一个字符串数组;
3.通过strrchr()函数,或类似函数,通过返回值判定字符串是否有该字符。 ( 第一条可以与此条合并执行,以下代码按3条思路进行)
存在的疑惑:exit()中的参数1或者0?
如果文件中,不存在此字符,那么参数是1(正常关闭)还是应该为0(异常关闭)呢?
如果有哪位大佬看到,能否帮助解答下我的疑惑。谢谢。
下面为程序,如有问题,请帮助指出
# include <stdio.h> # include <stdlib.h> # include <string.h> # include <stdbool.h> # define SIZE 50 # define LIM 100 int main(int argc, char* argv[]) { FILE* fp; bool infile = false; char ch; char aim = argv[1][0]; //需要判定的目标字符,注意命令行参数是以字符串形式存储 char arr[SIZE][LIM]; if(argc<3) //参数不足 { printf("The argument must over %d",argc-1); } if ((fp = fopen(argv[2], "r")) == NULL) //打开文件失败 { fprintf(stderr, "Can't open %s -filename", argv[2]); exit(EXIT_FAILURE); }
//全文件判定是否存在此字符 while ((ch = getc(fp)) != EOF ) { if (ch == aim) { infile = true; break; } else continue; } if (infile == false) { printf("No character %c in the file",aim); //如果不存在,直接关闭程序 exit(1); //1 还是 0 ??? } else rewind(fp); //回到文件指针初始位置
// 将文件中字符串赋给二维字符串数组 int i = 0; int j = 0; while ((ch = getc(fp))!= EOF) { if(ch == '\n') ch = '\0'; arr[i][j++]=ch; if(ch == '\0') { j = 0; i++; } }
//打印存在该字符的字符串 for(int k = 0;k<i;k++) { if((strrchr(arr[k],aim))!=NULL) puts(arr[k]); } fclose(fp); return 0; }