比较两个文件以在C编程中匹配行

时间:2019-05-23 04:00:15

标签: c string scanf getline strcmp

我正在编写一个比较两个文件的程序。如果出现匹配的行,则程序将继续执行某些任务。我的第二个文件只有一行,而第一个文件有几行

文件_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 个答案:

答案 0 :(得分:1)

我设法修复了它。 使用以下方式删除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编辑。

答案 1 :(得分:0)

当您使用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)