• ベストアンサー

プログラムが動きません。どうすれば動くのでしょうか?

このプログラム(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" % です。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.1

> while( (ch = getchar()) ) != EOF ) { 閉じカッコが1個多いですよ。

nadonado
質問者

お礼

気付きませんでした。ありがとうございました。

その他の回答 (5)

  • Interest
  • ベストアンサー率31% (207/659)
回答No.6

コンパイラが吐き出すエラーを省略せずそのままコピー&ペーストして質問したのは、非常に上手な質問の仕方ですね。 なにせ、コンパイラが test.c:15: error: 文法エラー before '!=' token と言っているのですから、これが 「test.cの15行目に文法エラーがあるよ。 != の前になんか忘れてねぇ?」 と言っているのだと気づけば、これからはコンパイラが吐き出すメッセージを読むだけでどこが悪いのか気づくようになるでしょう。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

「int の方がいい」ではなく「int でないとダメ」ですね>#4.

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

getcharの戻り値を受けるのは int方のほうがいいと思いますよ char型ですと EOFとの比較が意図しない結果を生むことがありますので

nadonado
質問者

お礼

わかりました。変えておきます。

  • jjk65536
  • ベストアンサー率59% (66/111)
回答No.3

エラーではないですが、間違いを見つけたので 指摘させてください。 wfp = fopen("filename", "w"); ここはダブルクォートをはずして wfp = fopen(filename, "w"); としないと、「filename」というファイルを開いて しまいますよ?

nadonado
質問者

お礼

そうなんですか。回答ありがとうございました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

> while( (ch = getchar()) ) != EOF ) { 閉じカッコ『)』の数があっていないように思います ココの閉じカッコの数が違うためにココ以降で文法エラーが発生しているのではないかと思います

nadonado
質問者

お礼

わかりました。ありがとうございました。

関連するQ&A