0

私は少し前にこれを尋ねましたが、本当に曖昧で、コードにもいくつか変更を加えました。

「stats.txt」というファイルを開いて、次のファイルを開きます:(「C」を使用)

fopen("stats.txt", r+)

プログラムの最初の実行時に、ファイルへの書き込みに使用される変数を入力するようにユーザーに依頼します。

fprintf(fp, "STR: %i(%i)\n", STR, smod);
fprintf(fp, "DEX: %i(%i)\n", DEX, dmod);

等...

プログラムが最初に実行された後のファイルは次のようになり、すべての番号がプログラム内の変数に対応します。

Level 1 Gnome Wizard:
STR: 8(-1)
DEX: 14(2)
CON: 14(2)
INT: 13(1)
WIS: 13(1)
CHR: 12(1)
APP: 11(0)
Fort save: 0
Reflex save: 0
Will save: 3

プログラムを閉じて2回目に実行すると、「stats.txt」ファイル内のテキストをチェックして表示する「IF」ステートメントがあります。

if (fgets(buf, 1000, fp) == NULL)
                {
                    printf("Please enter in your base stats (no modifiers):\n");
                    enter_stats();
                    printf("Please indicate your characters level:\n");
                    printf("I am a level ");
                    level = GetInt();
                    Race_check();
                    spec_check();
                    printf("------Base saving throws (no modifiers)------\n");
                    saving_throws();
                }
                else
                {
                    printf("%s",buf);
                }

私が抱えている問題は、プログラムがファイルを読み取るが、ここにあるように変数値を転送しないという事実です。

Level 1 Gnome Wizard:
-------------------------
STR: 0(-5)
DEX: 0(-5)
CON: 0(-5)
INT: 0(-5)
WIS: 0(-5)
CHR: 0(-5)
APP: 0(-5)
-----Saving Throws------
Fortitude: 0
Reflex: 0
Will: 0

変数の読み方についても誰か提案してもらえますか?

どうぞよろしくお願いいたします

4

1 に答える 1

0

コンピュータは数字だけを理解します-彼らはテキストを理解しません。これは、(個々の文字を表す)数値を目的の値に変換してどこかに保存するコードを作成する必要があることを意味します。

たとえば、ファイル全体を「charの配列」にロードし、その「charの配列」でを表す4つの数字を検索し、STR:空白(STR:との間)をスキップして、文字を0(0)次のように変換します。0値0をどこかに格納してから、文字をチェックし、(文字-1を値-1に変換してどこかに格納してから、)文字と改行文字をチェックします\n

より可能性が高いのは、コードを「各行ごと」のループとして配置することです。このループでは、行の最初の文字が他の文字の処理方法を決定します。たとえば、最初の文字が-その行を無視する場合。それ以外の場合、最初の5文字がlevel行の残りを処理する関数を呼び出す場合(1 Gnome Wizard); それ以外の場合、最初の数文字が、、、STR:などの場合はDEX:CON関数を呼び出して両方の数字を取得します(右角かっこなどを確認します)。そうしないと...

これらすべてに加えて、適切なエラー処理が必要です。大まかなガイドとして、コードの約半分はチェックとエラーメッセージ(のようなif( buffer[i] != '(' ) { printf("ERROR: Expecting left bracket after number on line %u", lineNumber); return -1;})である必要があります。

于 2013-02-26T07:24:26.183 に答える