アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (6件)

コンパイラが吐き出すエラーを省略せずそのままコピー&ペーストして質問したのは、非常に上手な質問の仕方ですね。



なにせ、コンパイラが
test.c:15: error: 文法エラー before '!=' token
と言っているのですから、これが
「test.cの15行目に文法エラーがあるよ。 != の前になんか忘れてねぇ?」
と言っているのだと気づけば、これからはコンパイラが吐き出すメッセージを読むだけでどこが悪いのか気づくようになるでしょう。
    • good
    • 0

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

    • good
    • 0

getcharの戻り値を受けるのは int方のほうがいいと思いますよ


char型ですと EOFとの比較が意図しない結果を生むことがありますので
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/07/08 21:37

エラーではないですが、間違いを見つけたので


指摘させてください。

wfp = fopen("filename", "w");

ここはダブルクォートをはずして

wfp = fopen(filename, "w");

としないと、「filename」というファイルを開いて
しまいますよ?
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/07/08 21:36

> while( (ch = getchar()) ) != EOF ) {


閉じカッコ『)』の数があっていないように思います

ココの閉じカッコの数が違うためにココ以降で文法エラーが発生しているのではないかと思います
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/07/08 21:35

> while( (ch = getchar()) ) != EOF ) {


閉じカッコが1個多いですよ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/07/08 21:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!