こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ファイルが開かない

こんにちは、最近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

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

投稿日時 - 2009-06-26 11:34:48

QNo.5075845

困ってます

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

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

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

投稿日時 - 2009-06-26 14:15:24

お礼

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

投稿日時 - 2009-06-26 16:36:51

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

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

投稿日時 - 2009-06-29 12:18:37

お礼

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

投稿日時 - 2009-07-06 16:17:04

ANo.1

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

投稿日時 - 2009-06-26 12:16:33

補足

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

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

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

投稿日時 - 2009-06-26 13:08:36

あなたにオススメの質問