2017-10-22 12 views
0

これは、1つのファイルから別のファイルにコンテンツをコピーするためのプログラムです。私のコードが期待どおりに動くようにオンラインコンパイラでEOFを指定する方法は?指定方法jdoodleのようなCオンラインコンパイラでファイルの終わり(EOF)を指定するには?

オンラインエディタのリンク---> https://www.jdoodle.com/c-online-compiler

//コンテンツをコピーするためのコード--- >>

#include "stdio.h" 

int main() 
{ 
char ch; 
FILE *p,*q; 
p=fopen("data.txt","w"); 
while(ch=getchar()!=EOF) 
{ 
    putc(ch,p); 
} 

fclose(p); 
p=fopen("data.txt","r"); 
q=fopen("newdata.txt","w"); 
while(ch=getc(p)!=EOF) 
{ 
    putc(ch,q); 
} 

fclose(p); 
fclose(q); 
q=fopen("newdata.txt","r"); 
while(ch=getc(q)!=EOF) 
{ 
    printf("\n%c",ch); 
} 

} 

答えて

2

表現ch=getchar()!=EOFには二つの問題があります。

    は、
  1. 最初はgetcharintを返します。これは比較のために実際に重要です。EOF

  2. 第2の問題は約operator precedenceです。あなたの表現は本当にch = (getchar() != EOF)です。つまり、の比較1または0)の結果を変数chに割り当てます。

、最初の問題を解決するintとして可変chを定義します。

第2の問題を解決するには、明示的なかっこを使用してください:(ch = getchar()) != EOF

+0

あなたの2番目のポイントは正しいです。しかし、Istポイントgetchar()は、キーボードから入力を読み込むために使用される関数です。一度に1文字ずつ読み込みます。 – rohitgoelrg

+2

@rohitgoelrg [読んで理解してください](https://stackoverflow.com/questions/35356322/difference-between-int-and-char-in-getchar-fgetc-and-putchar-fputc) –

関連する問題