gpt4 book ai didi

c - 程序打印不必要的 'ÿ' 字符

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:51 25 4
gpt4 key购买 nike

我的程序比较两个文本文件,并将第一个文件中的差异放入第三个文本文件中。但是,当我的文件 one 的大小大于我的文件 two 的大小时,在第三个文件的末尾放置一个 'ÿ' 字符。例如,假设文件一包含“我喜欢泡菜”。文件二包含“我喜欢狗”。那么第三个文件将包含“pickles.ÿ”。有没有办法摆脱这个?为什么会这样?这是我的程序:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

int ch1, ch2;
int size1, size2;
FILE *fh1, *fh2, *diffone=stdout;

if( argc<3 ) {
printf("need two file names\n"); return(1);
}
if(!(fh1 = fopen(argv[1], "r"))) {
printf("cannot open %s\n",argv[1]); return(2);
}
if(!(fh2 = fopen(argv[2], "r"))) {
printf("cannot open %s\n",argv[2]); return(3);
}
if(argc>3) {
if(!(diffone = fopen(argv[3], "w+"))) {
printf("cannot open %s\n",argv[3]); return(4);
}
}

fseek(fh1, 0, SEEK_END);
size1 = ftell(fh1);//gets size of fh1
fseek(fh1, 0, SEEK_SET);

fseek(fh2, 0, SEEK_END);
size2 = ftell(fh2);//gets size of fh2
fseek(fh2, 0, SEEK_SET);

while((!feof(fh1)) || (!feof(fh2)))
{
ch1=ch2='-';
if(!feof(fh1)) ch1 = getc(fh1);
if(!feof(fh2)) ch2 = getc(fh2);
if (size2 > size1)
{
if(ch1 != ch2 && (!feof(fh1)))
{
fprintf(diffone,"%c", ch1);
}
}
else
{
if (ch1 != ch2)
{
fprintf(diffone,"%c", ch1);
}
}

}
}

最佳答案

feof() 仅在 fgetc() 返回 EOF (-1) 后返回 true

参见 Why is “while ( !feof (file) )” always wrong?

关于c - 程序打印不必要的 'ÿ' 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19734807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com