我正在编写一个比较两个文件的程序。如果出现匹配的行,则程序将继续执行某些任务。我的第二个文件只有一行,而第一个文件有几行
文件_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
我想知道这里出了什么问题。任何建议,将不胜感激。
答案 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)