/ / używanie fgetc z && i || operatory w c - c

używając fgetc z && i || operatorzy w c - c

Pracowałem nad kodem, który łączy dwa pliki, oto kod:

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);}

dawał mi garbage output, aż zdałem sobie sprawę, że powinienem napisać warunek pętli while w ten sposób:

while((ch=fgetc(ptf1))!="n"&&ch!=EOF)

moje pytanie brzmi, co się dzieje podczas pisaniafgetc dwa razy? czy daje to dwie wartości ch? jak korzystać z fgetc z & operator? a także próbowałem użyć tego samego kodu, ale z || operatorem, a gdy dwukrotnie korzystamy z fgetc, wydawało się, że działa, mimo że dało mi garbage output na pierwszym znaku każdej linii, a gdy używam fgetc, gdy dał mi nieskończoną pętlę, powinienem użyć fgetc w ten sposób z || operator?:

while((ch=fgetc(ptf1))!="n"||(ch=fgetc(ptf1))!=EOF)

i tak z operatorem &&?

while((ch=fgetc(ptf1))!="n"&&ch!=EOF)

Odpowiedzi:

0 dla odpowiedzi № 1

Są to bardzo podstawowe / podstawowe operacje logiczne w programowaniu.

while((ch=fgetc(ptf1))!="n"&&ch!=EOF)

Oznacza odczyt znaku, jeśli ten znak nie jest znakiem nowej linii i nie jest to znak końca pliku, a następnie wykonaj ciało pętli.

while((ch=fgetc(ptf1))!="n"||(ch=fgetc(ptf1))!=EOF)

Oznacza odczyt znaku, jeśli ten znak nie jest znakiem nowej linii, wykonaj ciało pętli. W przeciwnym razie odczytaj inny znak, a jeśli nie jest to znak końca pliku, wykonaj ciało pętli.

while((ch=fgetc(ptf1))!="n"&&(ch=fgetc(ptf1))!=EOF)

Środki odczytują znak, jeśli ten znak nie jest znakiem nowej linii, czytaj inny znak, a jeśli drugi nie jest znakiem końca pliku, wykonaj ciało pętli.