我正在编写合并两个文件的代码,这是代码:
void merge_files(){
FILE *ptf1,*ptf2,*ptf3;
char file_name1[50],file_name2[50],ch,file_name3[50];
int count=0;
printf("please enter the names of the files you want to merge:\n");
printf("file 1:\t");
fflush(stdin);
scanf("%[^\n]s",file_name1);
printf("file 2:\t");
fflush(stdin);
scanf("%[^\n]s",file_name2);
printf("enter the name of the file you want to merge in:\t");
fflush(stdin);
scanf("%[^\n]s",file_name3);
ptf1=fopen(file_name1,"r");
ptf2=fopen(file_name2,"r");
ptf3=fopen(file_name3,"w");
check(ptf1);
check(ptf2);
check(ptf3);
while(!feof(ptf1)&&!feof(ptf2))
{
ch=0;
while((ch=fgetc(ptf1))!='\n'&&(ch=fgetc(ptf1))!=EOF)
{
fputc(ch,ptf3);
}
fprintf(ptf3,"\n");
while((ch=fgetc(ptf2))!='\n'&&(ch=fgetc(ptf2))!=EOF)
{
fputc(ch,ptf3);
}
fprintf(ptf3,"\n");
}
fclose(ptf1);
fclose(ptf2);
fclose(ptf3);}
它给了我一个垃圾输出,直到我意识到我应该像这样编写 while 循环条件:
while((ch=fgetc(ptf1))!='\n'&&ch!=EOF)
我的问题是写两次 fgetc 时会发生什么?它给 ch 两个值吗?我应该如何将 fgetc 与 & 运算符一起使用? 我也尝试使用相同的代码,但使用 ||运算符,并且当使用 fgetc 两次时,它似乎可以工作,即使它在每行的第一个字符处给了我垃圾输出,并且当使用 fgetc 一次它给了我一个无限循环时,我应该像使用 || 那样使用 fgetc 吗?运算符?:
while((ch=fgetc(ptf1))!='\n'||(ch=fgetc(ptf1))!=EOF)
就像 && 运算符一样?
while((ch=fgetc(ptf1))!='\n'&&ch!=EOF)
最佳答案
这些是编程中非常基本的逻辑操作。
while((ch=fgetc(ptf1))!='\n'&&ch!=EOF)
表示读取一个字符,如果该字符不是换行符也不是文件结束符则执行循环体。
while((ch=fgetc(ptf1))!='\n'||(ch=fgetc(ptf1))!=EOF)
表示读取一个字符,如果该字符不是换行符则执行循环体。否则,读取另一个字符,如果它不是文件结束字符,则执行循环体。
while((ch=fgetc(ptf1))!='\n'&&(ch=fgetc(ptf1))!=EOF)
表示读取一个字符,如果该字符不是换行符,则读取另一个字符,如果第二个字符不是文件结束符,则执行循环体。
关于c - 将 fgetc 与 && 和 || 一起使用c中的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50287908/