- ベストアンサー
なんらかの原因でtxtにデータを入力できない
こんにちは。 C言語初心者です。 まずこのようなデータを用意しました。 kus1.txt 89 65 37 44 51 30 20 10 そして、このようなプログラムをし、ビルトしました。 #include <stdio.h> #define NUM 8 int main(void) { FILE *fp; int kusa[NUM]; int max,min; int i,k; fp = fopen("kus1.txt","r"); if(fp == NULL){ printf("ファイルオープン失敗\n"); return 1; } for(i=0; i<NUM; i++){ fscanf(fp, "%d", &kusa[i]); } max = kusa[0]; min = kusa[0]; for(k=0; k<NUM; k++){ if(max < kusa[k]) max = kusa[k]; if(min > kusa[k]) min = kusa[k]; printf("NO.%-5d%d\n", k+1, kusa[k]); } printf("最高は%d。\n", max); printf("最低は%d。\n", min); fclose(fp); return 0; } その後、コマンドプロンプトでこれを実行したところ、 ファイルオープン失敗 とでてきました。つまりなんらかの原因で失敗しました。 どうしたら成功できるのでしょうか。教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
そのテキストファイルはどこのフォルダにありますか? プログラムを実行した時のカレントフォルダにないと、 fopen()で開けません。 カレントディレクトリってどこ? というのは http://oshiete1.goo.ne.jp/qa3513223.html で回答もらっていると思いますが…。 相対パスが判りにくいのでしたら、絶対パスで書いた方がいいかも知れません。 fopen("c:\\kus1.txt","r"); としておけば、Cドライブの直下にあるkus1.txtを開きます。 http://www.parof.jp/Programing/CGuide3/72/ なお、Visual Studioからデバッグ実行する場合は、プロジェクトの設定でカレントディレクトリの設定が出来ます。 # もっともVisual Studioからデバッグ実行した場合、コマンドプロンプトのウィンドウが一瞬で消えるでしょうから、 # 結果の確認が出来ないと思われますが。
その他の回答 (4)
- crew21
- ベストアンサー率26% (58/222)
下のコメントを全部読んでないから重複してたら悪いけど、まさかそのプログラムが動こうとしている場所に、"kus1.txt" が無い、なんてことはないだろうなあああああああああああああ! (こういう書き方は削除対象か?) それと、 >私は今、本でC言語を勉強しているのですが、その本によると、fopen("kus1.txt","r");でできるはずなのです。 いや、できないはず。 よく読んでごらん。できるのは、書き込みモードか追記モードでオープンした場合だけのハズだよ。 即ち、"w" か、"a" の場合だけ。
お礼
回答ありがとうございました。 そのとおり、そのプログラムが動こうとしている場所に、"kus1.txt"がありませんでした。fopen()の働きをしっかり理解していませんでした。しかし、Wr5さんの回答で、ようやくそれの働きや、"w","a"の意味が理解できました。まだまだ私は勉強不足でした。
- Wr5
- ベストアンサー率53% (2173/4061)
> 私は今、本でC言語を勉強しているのですが、 > その本によると、fopen("kus1.txt","r");でできるはずなのです。 C言語の標準仕様にはディレクトリ(フォルダ)という概念自体がなかったかと思いますが…… Visual Studio 2005で「デバッグ実行」でしたら [プロジェクト][プロパティ]の「デバッグ」で「作業ディレクトリ」から指定できますが…。
お礼
回答ありがとうございました。 私の勉強不足により、作業ディレクトリの指定方法がわかりませんでしたが、これから理解していきたいとおもいます。 最後まで詳しく、丁寧に教えてくださってありがとうございました。
- koko_u_
- ベストアンサー率18% (459/2509)
>fopen("kus1.txt","r");でできるようにするには >どこにメモ帳で作成したkus1.txtを保存すればよいのでしょうか。 プログラムを起動したカレントディレクトリ 例えば、 $ pwd /usr/home/kusakan $ gcc kus.c -o kus $ ./kus と実行しているのであれば、/usr/home/kusakan に kus1.txt があれば良い。 VC++ の IDE から起動している場合はプロジェクトの下の Debug あたりにプログラムが出来るから多分ソコ。
お礼
回答ありがとうございました。 $ pwd /usr/home/kusakan $ gcc kus.c -o kus $ ./kus の意味がわかりませんでしたが、それは私の勉強不足です。 これからも勉強して、理解していきたいとおもいます。
- koko_u_
- ベストアンサー率18% (459/2509)
>とでてきました。つまりなんらかの原因で失敗しました。 >どうしたら成功できるのでしょうか。教えてください。 printf("ファイルオープン失敗\n"); の所を perror("fopen"); に変えて実行すると、もちょっとそれらしいメッセージが見れるのでは?
お礼
回答ありがとうございました。 なるほど、perror("fopen");と入力すると、 より具体的に原因がわかりました。 今回の場合、そのファイル自体がないとのことでした。 しかし、その原因は、Wr5さんの回答で、指定したところにtxtを保存していなかったからということがわかりました。
お礼
回答ありがとうございました。 fopen()の働きが、ようやくわかりました。 メモ帳で作成したkus1.txtを、Cに保存し、 fopen("c:\\kus1.txt","r");としたらできました。 しかし、fopen("c:\\kus1.txt","r");ではなく、 fopen("kus1.txt","r");でできるようにするにはどこにメモ帳で作成したkus1.txtを保存すればよいのでしょうか。 私は今、本でC言語を勉強しているのですが、 その本によると、fopen("kus1.txt","r");でできるはずなのです。