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

以下のプログラムを見てください。

char filename[20];

gets(filename);
if((fp = fopen(filename, "r") == NULL)
{
--------
--------
}

もうひとつはこれです。

char filename[20];

scanf("%s", filename);
if((fp = fopen(filename, "r") == NULL)
{
--------
--------
}

上では実行できましたが、下ではダメでした。
なにか初歩的なミスをしてるようなんですが、わかりません。
教えていただきたいのですが。

A 回答 (4件)

#include <stdio.h>


main(){
char filename[20];

gets(filename);
printf("[%s]\n",filename);

scanf("%s", filename);
printf("[%s]\n",filename);

}
------------------------------------------------------------
というプログラムを実行してみれば,動作の違いはわかるはずです.

エラーが起きて,原因がよくわからなかったら,
プリント文を埋め込むなりして,
よく確認しましょう.
    • good
    • 0

scanfを実行毎にfflush(stdin)を実行することで解決しませんか?



yokoyariさんのいわれてるようにscanfでは読みとった部分以外の
ところが蓄積されてしまうため、それを初期化するのが
fflushです。なんにしてもgetsはなんでもかんでも
上書きしやがる凶悪な奴なの私は嫌いです。。
    • good
    • 0

scanfでfilenameを読み込ませる前に


別のscanfで何か読み込ませていませんか?
scanfは[Enter]のキーコードが次のscanfに持ち越される
性質を持っていますので…

私は一時期↑でドツボにはまっていた事がありまして…
もし、はずしていたらすいません。
    • good
    • 0

どんなファイル名を入力した、とか、どういうふうに駄目だった、とかが書かれて


いないので、回答も占いのよう(当たるも八卦…)なものしかできません。

ありそうなところとして、空白を含むファイル名を入力した、というのが思いつきます。
scanf() は、空白やタブで項目を区切ってしまうから、期待通りの文字列が filename に
入っていなかった、というところでしょうか。
    • good
    • 0

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