Сравнение двух файлов для сопоставления строк в C Программирование - PullRequest
2 голосов
/ 23 мая 2019

Я пишу программу для сравнения двух файлов. Если совпадающие строки встречаются, программа продолжит выполнение некоторой задачи. Мой второй файл имеет только одну строку, а первый файл имеет несколько строк

Содержимое файла_1

apple is red
oranges are orange 
banana is yellow
cat is black
red is not green

Содержимое файла_2

cat is black

Я использовал функцию fscanf, чтобы прочитать строки File_2 и сохранить его в переменной.

if ((fp=fopen(File_2, "r")) == NULL) 
{
  printf("Error opening File");
}
fscanf(fp,"%[^\n]", name);
fclose(fp);

Я использовал следующий метод для поиска сходства в File_1

 fp = fopen(File_1, "r");
      while ((read = getline(&line, &len, fp)) != -1)
          {
             if (strcmp(line,name)==0)
               {
                printf("Hurray\n");
                break;
               }
             else
               {
               printf("I am unlucky\n");
               }
          }
      fclose(fp);

Но моя проблема в том,

strcmp() не возвращается 0

Мне было интересно, что здесь пошло не так. Любые предложения будут оценены.

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Мне удалось это исправить.Удалил символ новой строки, который был включен в getline(), следующим образом:

fp = fopen(File_1, "r");
      while ((read = getline(&line, &len, fp)) != -1)
          {
             line[strcspn ( line, "\n" )] = '\0';   \\ will drop the newline character
             if (strcmp(line,name)==0)
               {
                printf("Hurray\n");
                break;
               }
             else
               {
               printf("I am unlucky\n");
               }
          }
      fclose(fp);

Я надеюсь, что есть лучшие способы сделать это.

Спасибо ggorlen, user3386109 и WhozCraig засоветы по отладке.Также для редактирования Nayantara Jeyaraj.

0 голосов
/ 23 мая 2019

когда вы используете getline для чтения File_1, вы получаете \n символ новой строки, как указано в WhozCraig.

Следующие слова для завершения строк с \0 должны решить эту проблему:

      while ((readlen = getline(&line, &len, fp)) != -1)
          {
             if (line[readlen-1] == '\n')
                 line[--readlen] = '\0';
             if (strcmp(line,name)==0)
...