变量不断重置

时间:2019-10-02 15:14:53

标签: c variables global

我编写了一段代码,该代码采用命令行参数来搜索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。

0 个答案:

没有答案