我编写了一段代码,该代码采用命令行参数来搜索txt文件中的指定单词,然后返回找到该单词的次数。 我试图让它只打印在所有文件中找到的单词的总数,但是目前,我只能让它打印在每个文件中单独找到单词的次数。
正在运行的代码示例为./nameofcode bird test1.txt test2.txt test3.txt
我尝试了几种不同的想法,但是似乎都没有用。想法是让变量final计入总次数,然后在所有搜索完成后将其打印出来,但是每次搜索后它只会重置或保持为0
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <errno.h>
int main(int argc, char * argv[]) {
int final = 0;
int result, errno;
int i;
int n;
char * word = argv[1];
char * list[200];
//pid_t pid = fork();
if (argc < 1) {
exit(1);
}
system("cls");
for (i = 2; i < argc; i = i + 1) {
if (fork() == 0) {
list[i] = argv[i];
result = Search_in_File(word, list[i]);
final = final + result;
if (result == -1) {
printf("\n Invalid input.");
} else {
printf("\n Total matches found: %d\n", result);
}
exit(0);
}
for (n = 0; n < argc - 1; n++) {
wait(NULL);
}
}
if (result == -1) {
perror("Error");
if (errno == 10) {
printf("\n Invalid file");
exit(1);
} else {
printf("\n Error number = %d\n", errno);
exit(1);
}
printf("%d\n", final);
}
return (0);
}
int Search_in_File(char * str, char * fname) {
FILE * fp;
int line_num = 1;
char temp[200];
int find_result = 0;
if ((fp = fopen(fname, "r")) == NULL) {
return (-1);
}
while (fgets(temp, 200, fp) != NULL) {
if ((strstr(temp, str)) != NULL) {
find_result++;
//final++;
}
line_num++;
}
if (find_result == 0) {
printf("\nSorry, couldn't find a match.\n");
}
if (fp) {
fclose(fp);
}
return (find_result);
}
如果每个文件中包含Birds一词的3倍,则预期结果将是9,但改为3或0。