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

こんにちは、最近C言語の入門書を読み とあるプログラムをつくったのですが、思ったようになりません。 そのプログラムは typ1 という名前でこのようになっています。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
FILE *fin;
char buf[256];
char filename[80];

printf("入力ファイル名を指定してください=");
gets(filename);

fin = fopen("filename", "r");
if(fin == NULL)
{
printf("%sをオープンできません\n", filename);
exit(1);
}
while(fgets(buf, 256, fin) != NULL){
printf("%s", buf);
}
fclose(fin);

return 0;
}

となっており、プログラムを起動して指定したファイルを読み込んで、その内容を画面に出力するというものです。読み込み用ファイル(名前はsmp1)はメモ帳でつくっており、内容はアルファベットを一行目に、1から9の数字を二行目に書いて、アプリケーションのtyp1.exeがあるDebugというディレクトリと同じ場所に保存しております。

このプログラムはVisual Studio net 2003で作っおり エラー等はなく正常に動くのですが読み込むファイル(この場合smp1)を指定しても

入力ファイル名を指定してください=smp1.txt
smp1.txtをオープンできません。
Press any key to continue

となってしまいます。 
読み込み用ファイルの場所が適切ではないのでしょうか? どなたか教えてください。

A 回答 (3件)

No.1です。


どうもファイルの置く場所が問題なようです。
実行したときの作業ディレクトリは設定をしていなければ、デフォルトでvcpojファイルが置いてある場所のようです。
なのでexeの場所では、ファイルを見つけることできていないようです。すいませんでした。

なのでファイルをソースが置いてあるフォルダに置くか、もしくはフルパスで指定してください。
ちなみにフルパス指定だとC:\でなく、C:\\と\を2個記述してください。
    • good
    • 0
この回答へのお礼

ありがとうございました。ソースの置いてあるフォルダにファイルを移動してVC Net 2003 を起動してdebugしてみたところうまくいきました。
ちなみにフルパス指定はどこでやるのですか?
コマンドプロンプト画面だと C:\> となりBackspace押しても > が消えません。これだとC:\\のようにできないのですが、よろしければ教えてください。

お礼日時:2009/06/26 16:36

gets関数は入力したものを読み込むものですのから、気にせずC:\~~~ファイル名と入力すればいいです。

消すとかそういう操作はいりません。
    • good
    • 0
この回答へのお礼

遅くなってすいません。言われたとおりにやってみたところ同じようにできました。本当にありがとうございました。 

お礼日時:2009/07/06 16:17

> fin = fopen("filename", "r");


filenameは変数なので、""はいらないと思います。
これではfilenameというファイル名のファイルを開こうとしてしまいます。
fin = fopen(filename, "r");
ファイルのパスは省略してもexeと同ディレクトリであれば問題ないです。

この回答への補足

ご返事ありがとうございます。 早速言われた場所を
fin = fopen(filename, "r");
に直しました。。しかしあいかわらず

入力ファイル名を指定してください=smp1.txt
smp1.txtをオープンできません。
Press any key to continue

と表示されてしまいます。
他に何か問題があるのでしょうか?

補足日時:2009/06/26 13:08
    • good
    • 0

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