- ベストアンサー
プログラムが動きません。どうすれば動くのでしょうか?
このプログラム(test.cとする)の内容を標準入力から読み込み、copied.cという名前のファイルにwモードで書き込むプログラム。(標準入力からの読み込みとファイルへの書き込みでは、1文字単位での入出力)なのですが、エラーが出て動きません。動かすにはどうすればよいでしょうか? <ソース> #include<stdio.h> int main(void) { char *filename = "copied.c"; FILE *wfp; char ch; wfp = fopen("filename", "w"); if( wfp == NULL ) { printf("ファイルが見つかりません: %s\n", filename); return 1; } while( (ch = getchar()) ) != EOF ) { fputc(ch, wfp); } fclose( wfp ); return 0; } <エラー> % gcc -o test test.c test.c: 関数 `main' 内: test.c:15: error: 文法エラー before '!=' token test.c: トップレベル: test.c:19: 警告: 関数宣言中に(型の無い)仮引数名があります test.c:19: 警告: data definition has no type or storage class test.c:20: error: 文法エラー before "return" % です。よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> while( (ch = getchar()) ) != EOF ) { 閉じカッコが1個多いですよ。
その他の回答 (5)
- Interest
- ベストアンサー率31% (207/659)
コンパイラが吐き出すエラーを省略せずそのままコピー&ペーストして質問したのは、非常に上手な質問の仕方ですね。 なにせ、コンパイラが test.c:15: error: 文法エラー before '!=' token と言っているのですから、これが 「test.cの15行目に文法エラーがあるよ。 != の前になんか忘れてねぇ?」 と言っているのだと気づけば、これからはコンパイラが吐き出すメッセージを読むだけでどこが悪いのか気づくようになるでしょう。
- Tacosan
- ベストアンサー率23% (3656/15482)
「int の方がいい」ではなく「int でないとダメ」ですね>#4.
- redfox63
- ベストアンサー率71% (1325/1856)
getcharの戻り値を受けるのは int方のほうがいいと思いますよ char型ですと EOFとの比較が意図しない結果を生むことがありますので
お礼
わかりました。変えておきます。
- jjk65536
- ベストアンサー率59% (66/111)
エラーではないですが、間違いを見つけたので 指摘させてください。 wfp = fopen("filename", "w"); ここはダブルクォートをはずして wfp = fopen(filename, "w"); としないと、「filename」というファイルを開いて しまいますよ?
お礼
そうなんですか。回答ありがとうございました。
- redfox63
- ベストアンサー率71% (1325/1856)
> while( (ch = getchar()) ) != EOF ) { 閉じカッコ『)』の数があっていないように思います ココの閉じカッコの数が違うためにココ以降で文法エラーが発生しているのではないかと思います
お礼
わかりました。ありがとうございました。
お礼
気付きませんでした。ありがとうございました。