在C中逐字符比较文本文件
我正在编写一个小程序,其功能如下: 执行时,接受两个文本文件作为参数。 逐个字符比较每个文本文件,向用户显示每个比较是否成功。 当同一位置的两个字符不相同时,会将此信息告知用户,然后程序结束。 如果两个文本文件完全相同,也会告诉用户,程序结束在C中逐字符比较文本文件,c,io,char,C,Io,Char,我正在编写一个小程序,其功能如下: 执行时,接受两个文本文件作为参数。 逐个字符比较每个文本文件,向用户显示每个比较是否成功。 当同一位置的两个字符不相同时,会将此信息告知用户,然后程序结束。 如果两个文本文件完全相同,也会告诉用户,程序结束 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) // define main procedure, taking an command
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) // define main procedure, taking an command line argument
{
int ch, ch2; // index for current character
FILE *fp; // pointer to file
FILE *fp2;
unsigned long count = 0;
if (argc != 3) //
{
printf("Usage: %s filename \n", argv[0]);
exit(EXIT_FAILURE);
}
if ((fp = fopen(argv[1], "r")) == NULL) // check for 'cannot open' error in first file
{
printf("Can't open %s\n", argv[1]);
exit(EXIT_FAILURE);
}
else if ((fp2 = fopen(argv[2], "r")) == NULL) // check for 'cannot open' error in second file
{
printf("Can't open %s\n", argv[2]);
exit(EXIT_FAILURE);
}
while ((ch = getc(fp) != EOF) || (ch2 = getc(fp2) != EOF)) // while both files still have characters remaining
{
printf("\n %d %d \n", ch, ch2); // print both characters (debugging purposes)
if (ch == ch2) // if two characters are same at current position
{
printf("FILES ARE SAME AT POSITION %d", count); // report to user
count++; // increase count
}
else
{
printf("FILES ARE NOT NOT NOT SAME AT POSITION %d", count); // report that files are not same at current position
fclose(fp); // close files
fclose(fp2);
exit(EXIT_FAILURE); // exit
}
}
fclose(fp);
fclose(fp2);
printf("FILES ARE THE SAME THROUGHOUT!");
return 0;
但是,程序在比较时会显示文件中没有的随机字符,从而导致无限循环和错误执行
是我的文件指针不正确,还是我把某个数据类型搞砸了,导致了这种情况?考虑一下paren在代码中的位置:
if ((fp = fopen(argv[1], "r")) == NULL)
while ((ch = getc(fp) != EOF) || (ch2 = getc(fp2) != EOF))
现在仔细看看,比较一下paren在代码中的位置:
if ((fp = fopen(argv[1], "r")) == NULL)
while ((ch = getc(fp) != EOF) || (ch2 = getc(fp2) != EOF))
你注意到有什么不一致吗?也许你是想写这个:
while ((ch = getc(fp)) != EOF || (ch2 = getc(fp2)) != EOF)
你的程序还有一个问题。在打印文件中,位置%d处的文件相同,计数;您告诉printf打印一个由count表示的int,但count不是int。。。您应该将%lu用于无符号长值。首先,您应该将while循环从
while ((ch = getc(fp) != EOF) || (ch2 = getc(fp2) != EOF))
到
作为!=优先级高于=,您的while循环始终存在问题您需要在调试器中运行程序并在不同点检查变量…我不知道它是否相关,但您可能希望像这样修复while。而ch=getcfp!=EOF&&ch2=getcfp2!=EOFI我非常确定您的while条件必须与&&相连接,否则只要其中一个文件尚未达到eof,它就会读取这两个文件。@pfannkuchen\u gesicht我非常确定这就是目的。。。您必须阅读while循环的测试条件以外的内容才能了解原因;但这将导致垃圾被打印出来。