2017-11-13 15 views
0

ユーザーからの入力を受け取り、その入力をファイルに保存します。下のコードでは、whileループを削除するとファイルが追加されますが、ユーザーが500文字までのデータを入力できるようにこのループが必要です。whileループを使用してデータをファイルに保存しません。

int main() 
{ 
    char Buffer1[5]; 

    FILE *ot; 
    fopen_s(&ot, "D:\\export1.txt", "a+"); 

    fseek(ot, 0L, SEEK_END); 

    int sz = ftell(ot); 

    printf("Enter Data.\n"); 

    while (sz<500) { 

     for (int i = 0; i < 5; i++) { 
      scanf_s("%c", &Buffer1[i]); 
     } 

     // write data to file 

     for (int i = 0; i < 5; i++) { 
      fputc(Buffer1[i], ot); 
     } 

     sz = ftell(ot); 
    } 

    fclose(ot); 
    _gettch(); 
    return 0; 
} 
+4

「fopen」が機能することを確認すると便利でしょう。これらの関数呼び出しの残りの部分はそのまま –

+0

ファイルがすでに500バイトで埋められている場合はどうなりますか? – VTT

+1

'while'ループでは、ユーザが500文字を入力するとプログラム*が主張します。プログラムを早期に終了し、 'fclose()'が実行されないようにすると、ファイルに変更が見られないことがあります。 –

答えて

0

この実装は、ユーザーが合計500バイトを作成するために必要なバイト数を正確に付加する場合にのみ機能します。

最初にファイルサイズを確認してから、ユーザーに最大500ファイルサイズの文字を入力させてから、そのファイルにユーザー入力を追加することがより簡単になる場合があります。

+0

データをチャンクに保存したい場合はどうすればいいですか?オートセーブのように。 –

+0

ユーザーが入力を完了したときには、何かを知っておく必要があります。通常これは、入力キーを認識することによって行われます。 scanfは、%sフォーマットを使用しているときにEnterキーをチェックし、それを検出すると文字のスキャンを停止します。 Enterキーが検出されている限り、チャンクの使用は問題ありません。 – Unh0lys0da

0
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include <stdarg.h> 
#include <conio.h> 

#define ARRAY_LIMIT 10 
int main() 
{ 
    char array[ARRAY_LIMIT]; 
    int i = 0; 
    FILE *ot; 
    fopen_s(&ot, "export1.txt", "a+"); 

    fseek(ot, 0L, SEEK_END); 

    int sz = ftell(ot); 

    printf("Enter Data.\n"); 

    while (sz < 500) 
    { 
     while (i < ARRAY_LIMIT) 
     { 
      array[i] = getch(); 
      printf("%c", array[i++]); 
     } 
     i = 0; 
     fwrite(array, sizeof(array), 1, ot); 

     sz = ftell(ot); 
     //be on the safe side... 
     if (sz != 500 && 500 - sz < ARRAY_LIMIT) 
      i = ARRAY_LIMIT - (500 - sz); 
    } 

    fclose(ot); 
    return 0; 
} 
+0

私たちが減らすことができれば、何回書きますか?だから私はBuffer1配列を使用しています。 –

+0

もし私が間違っていても、500文字を入力しても同じであると私を訂正してください... –

+0

実際に私が書いていたのは、ファイルに書き込むことです。forループを使用していますが、fputsと置き換えることができます。私がファイルに何回書き込むかを減らしたいのです。 –

関連する問題