前提・実現したいこと
同じフォルダに入っているtest.batに書いてある変数の値をキースペースを押したときに読み込みたいのですがうまくいきません。あと何を付け足せばいいのでしょうか。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
if (Key[KEY_INPUT_SPACE] == 1) {
FILE* fp;
char filename[] = "test.bat";
int buf_w[1], buf_r[1];
int i;
tai = 0;
for (i = 0; i < 1; i++)
buf_w[i] = (i + 1);
if (!(fp = fopen(filename, "wb")))
return;
if (fwrite(buf_w, sizeof(int), 1, fp) != 1) {
fclose(fp);
return;
}
fclose(fp);
if (!(fp = fopen(filename, "rb")))
return;
if (fwrite(buf_r, sizeof(int), 1, fp) != 1) {
fclose(fp);
return;
}
fclose(fp);
Seen = buf_r[i];//batファイルの一行目に読み込んだ値を変数Seenに代入する
試したこと
debugを行うと変数iは‐1でした。0に設定したはずなのになぜでしょうか。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
編集
あの後以下のように書き直しました。
if (Key[KEY_INPUT_SPACE] == 1) {
if (!(fp = fopen(filename, "rb")))
return;
if (fwrite(buf_r, sizeof(int), 1, fp) != 1) {
fclose(fp);
return;
}
fclose(fp);
Seen = buf_r[yomikomi];
}
test.batの中身は数値の8です。
変数iは名前をyomikomiに変えました。実行時の値はyomikomiもbuf_r[yomikomi]も0です。
また初期化のためにint buf_r[1] = { 0 };と書きましたが「初期化されていないメモリbuf_rを使っていますと言われます。
FILE* fp;
char filename[] = "test.bat";
int buf_r[1] = { 0 };
int yomikomi = 0;
実行ファイルを開き、スペースキーを押しましたところyomikomiもbuf_r[yomikomi]も0のままで、変数Seenも0のままです。
編集2
if (Key[KEY_INPUT_SPACE] == 1) {
if (!(fp = fopen(filename, "rb")))
return;
if (fread(buf_r, sizeof(int), 1, fp) != 1) {
fclose(fp);
return;
}
fclose(fp);
Seen = buf_r[yomikomi];
}
}
のように書き直し、バッチファイルの内容は
Seen = 8;
と書きました。実行してスペースキーを押すとSeenの値が変化しました。
しかし8に変化したのではなく、とんでもなく大きな数値1852138835に変化しました。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
+1
fwrite
してるからでは。
fread
しないと。
投稿
score 14022
-
回答の評価を上げる
以下のような回答は評価を上げましょう
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
if (!(fp = fopen(filename, "wb")))
これでいきなりtest.batの内容を消去してしまってます
また、どーみても、ファイルから読み込んでません。
そもそもの作りを見直しましょう
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
fscanf を使えば簡単です。
#include <stdio.h>
int main(void)
{
FILE *fp = fopen("test.bat", "r");
if (!fp) return 1;
int seen;
if (fscanf(fp, " Seen =%d", &seen) != 1) return 2;
fclose(fp);
printf("seen = %d\n", seen);
}
投稿
score 610
-
回答の評価を上げる
以下のような回答は評価を上げましょう
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 90.07%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼