与&&;c中的and | |运算符

与&&;c中的and | |运算符,c,C,我正在编写合并两个文件的代码,下面是代码: 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("%[^\

我正在编写合并两个文件的代码,下面是代码:

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两个值吗?我应该如何与&operator一起使用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)
表示读取一个字符,如果该字符不是换行符,则执行循环体。否则,读取另一个字符,如果它不是文件结尾字符,则执行循环体

while((ch=fgetc(ptf1))!='\n'||(ch=fgetc(ptf1))!=EOF)
while((ch=fgetc(ptf1))!='\n'&&(ch=fgetc(ptf1))!=EOF)

表示读取一个字符,如果该字符不是换行符,则读取另一个字符,如果第二个字符不是文件结尾字符,则执行循环体。

代码中有很多问题,首先刷新stdin是未定义的行为,并且fgetc被分配给ch,您不需要使用==而不是==进行计算吗?
while((ch=fgetc(ptf1))!='\n'||(ch=fgetc(ptf1))!=EOF)
while((ch=fgetc(ptf1))!='\n'&&(ch=fgetc(ptf1))!=EOF)