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 № 1Są 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.