2017-10-18 1 views
-1

ファイルにデータを入力してコンソールで読み込んで印刷しようとしています。ここでファイルからの出力が正しくありません

は私のコードです:

fp=fopen("user1","w+"); 
    char line[1000]; 
    char *c; 
    //write on file 

    while(1) 
    { 
     fgets(line,sizeof(line),stdin); 
     if(strcmp(line,":wq\n")==0) //input ends when user enters :wq 
      break; 
     else 
      fputs(line,fp); 
    } 
    //read from file 
    fflush(stdin); 

    while(1) 
    { 
     c=fgetc(fp); 
     if(c==EOF) 
      break; 
     else 
      printf("%ch",c); 
    } 

私は、入力データを

bjsa

として:

WQ出力:問題は何

h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h 

+0

:これは、ファイルを書き込んだ後、あなたはそれを閉じる必要があり、その後のような

何かを読み取るためのそれを開く)int型

2でなければなりません、c) '、それが出力にたくさんのhを入れている理由です。 – Milack27

+0

最初の問題は、完全なコードを投稿しなかったことです。あなたが良い答えをしたいのであれば私たちに推測させてはいけません。 –

+0

私は上記の問題に関連するコードの部分を投稿しました。完全なコードを投稿すると、実際の問題からフォーカスがそらされ、物事が混乱することになります。 –

答えて

1

は、私は2つの問題

1)あなたのfgetcがcharポイントに割り当てるを参照してください。それは間違いです。私はあなたが `のprintf(「%cを」意味だと思い

fp=fopen("user1","w+"); 
    char line[1000]; 
    int c;    // notice ...... 

    //write on file  
    while(1) 
    { 
     fgets(line,sizeof(line),stdin); 
     if(strcmp(line,":wq\n")==0) //input ends when user enters :wq 
      break; 
     fputs(line,fp); 
    } 
    fclose(fp); 


    //read from file 
    fp=fopen("user1","r"); 
    while(1) 
    { 
     c=fgetc(fp); 
     if(c==EOF) 
      break; 
     printf("%ch",c); 
    } 
    fclose(fp); 
+0

'fgets()'の戻り値をチェックする必要があります。無限ループを避ける必要があります。最初のループ条件で 'fgets()'をテストし、2番目のループ条件で代入と比較の結果を返します。 –

+0

ファイルを閉じて開くことは助けました。私はファイルへの書き込みが最後の書き込み位置までポインタを移動するのを忘れていました。これはなぜ私が非常に多くの 'h'を得たのかを説明します。 –

+0

cでint型を使用した理由は分かりますか? –

関連する問題