-1

.dat ファイルを開いてから書き込もうとしています。ファイルは単純な一連の数字ですが、追加したいと思います。現在、fputs が機能していません。

仕事をするために正しい機能を使用しているかどうか疑問に思っていました。現在、定数文字ではないため、関数fputsで整数 enter_thisを使用できないと言われています。

ファイルに整数を追加するようにユーザーに依頼したいと思います。これを理解した後の次のステップは、文字列、フロート、文字などを追加することです。しかし、機能しているものを手に入れるだけでも良いです。

#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include

//functions called

//why is it void?
int main(void)
{

    FILE *pFile;
    int choice = 0;
    char buf[40];
    int i = 0;
    int num[40];
    int enter_this;

    printf("WELCOME. \n\n");
    pFile = fopen("test.dat", "r");
    if (pFile != NULL)

    for (i = 0; i < 8; i++)
    {
        //get num
        fgets(buf, sizeof(buf), pFile);
        num[i] = atoi(buf);

        printf("#%i = %i\n", i, num[i]);
    }


    printf("Enter number to be added: ");
    gets_s(buf);
    enter_this = atoi(buf);
    fputs(enter_this, pFile);
    fclose(pFile);

    system("pause");

}//end main
4

1 に答える 1

1
int main(void)

この場合の「void」は、関数「main」が引数を受け入れないことを意味します。C で空の括弧をそのままにしておくと、関数が期待する 0 ではなく、可変数の引数を受け入れることを意味します。

ファイルの末尾に番号を追加する場合は、「追加モード」でファイルを開く必要があります。

FILE *pFile = fopen("test.dat", "a");

2 番目の引数 "a" はモード文字列です。これは、追加のためにファイルを開くように fopen に指示します。つまり、データはファイルの最後に書き込まれます。ファイルが存在しない場合は、作成されます。現在、ファイルを「読み取り専用」モードで開いているため、書き込みはまったくできません。fopen が取るさまざまなモード文字列については、こちらを参照してください。

ファイル ポインタが NULL かどうかを確認するチェックも冗長です。ポインターが NULL でない場合に実行する 'if' にブロックを渡していません。次のようになります。

if (!pFile) {
    puts("Something went wrong");
    exit(1);
}

最後に、fputs は STRING 値、つまり文字定数を取ります。これは整数であるため、enter_this の使用を拒否します。整数をファイルに書き込む 1 つの方法は、fprintfを使用することです。例えば:

/* Write the integer enter_this & a newline to pFile */
fprintf(pFile, "%d\n", enter_this);
于 2014-03-25T04:34:14.700 に答える