ID非公開さん
2022/6/23 15:06
1回答
Windows、c言語です。 まず、プログラム上でコマンドプロンプトに指令し、a.batを起動します。
Windows、c言語です。 まず、プログラム上でコマンドプロンプトに指令し、a.batを起動します。 a.batは「test.txtに書かれている文字が1になるまで待機、1になったら「finish!」と画面に表示」するものです。 そして、プログラム上で、ユーザーがキーボード入力した文字をファイルに書き込み続けます。 一回一回fcloseするから問題ないだろうと思ったのですが、どうやらfopenができないようです。 どうすればよいでしょうか a.bat type nul > test.txt :first findstr '1' test.txt if %errorlevel%==1 ( goto first ) else ( echo "finish" exit ) a.c int main(){ system("a.bat"); char c='\n; while(c!='1'){ FILE* fp=fopen("test.txt","w"); if(fp){ scanf('%c',&c); fprintf(fp,"%c",c); } else printf("開けません"); fclose(fp); } } return 0; }
ベストアンサー
上のコードですと、一度fopen成功した後 fcloseせずに再fopenしていますよ。 while(c!='1'){ FILE* fp=fopen("test.txt","w"); if(fp){ scanf('%c',&c); fprintf(fp,"%c",c); fclose(fp); /* ここに来るときはオープンしているので必要 */ } else printf("開けません"); /* fclose(fp); */ /* ここに来るときはオープンしていないので不要 */ } もしbatファイルでの読み込みとcプログラムでの書き込みで 衝突問題があるならば リトライ機能をつける等の対策が必要になります。 (Linuxならば一時的ファイル(temp.txt等)に書き込み rename("temp.txt", "text.txt")とすることで 安全性を確保できるのですが Windowsではrenameでの上書きができません)
ID非公開さん
質問者2022/6/25 12:09