プロが教えるわが家の防犯対策術!

C言語を勉強し始めた初心者です。
後述するプログラムにおいて、カレントディレクトリ上にあるフォルダー(data)内のファイル名をfscanfで読み込んで、標準出力で表示するプログラムを作っています。
コンパイルはうまくいくのですが、プログラムを実行しようとするとプログラムが停止してうまくいきません。
不具合点と改善点をおしえてください。
実行環境?はwindows7,visual studio 2013 です。

#include<stdio.h>

int main(void)
{
int i=0;
char s[100][100];
FILE *fp;
fp=fopen(".\\data","r");
while((fscanf(fp,"%s",&s[i][100]))!=EOF){
printf("%d:%s\n",i,s[i][100]);
i++;
}
return 0;
}

A 回答 (4件)

fp=fopen(".\\data","r");  これはフォルダーですよね。


fp=fopen(".\\data\\hoge.txt","r"); こうしないと。

それと、
char s[100][100];

と宣言したら、添字は0~99までの100個です。
&s[i][100] や s[i][100]は使えません。

この回答への補足

すばやい回答ありがとうございます。
フォルダ内の hoge.textの中身 を読み込みたいのではなく、

~dataフォルダ内~

ああああ.txt
いいいい.txt
うううう.txt

~~~~~~~~~

のようなフォルダ内の"ああああ" "いいいい" "うううう"を読み込みんで表示したいのです。

s[1][100]=ああああ\0
s[2][100]=いいいい\0
s[3][100]=うううう\0

のようにiを設定したつもりだったのですが、使えないのですか?

補足日時:2014/05/18 14:17
    • good
    • 0

#include<stdio.h>



int main(void)
{
int i=0;
char s[100][100];
FILE *fp;
fp=fopen(".\\data\\hoge.txt","r");
while((fscanf(fp,"%s",&s[i]))!=EOF){
printf("%d:%s\n",i,s[i]);
i++;
}
return 0;
}

これで動きますね。
    • good
    • 0

あとは、


fp=fopen(".\\data","r");  で失敗した時の処理、
if(fp==0){エラー処理}    をつける。

データが100件を超えたら処理を終わること。
    • good
    • 0

ディレクトリーを読むなら、


http://www.geocities.co.jp/SiliconValley-Cuperti …

こういうふうにします。
    • good
    • 0
この回答へのお礼

度々の回答ありがとうございました。
自分の最初の質問内容がいまいちわかりづらかったのかもしれません。
ディレクトリを読んで表示するには、fopenではできなかったのですね、自分の勉強不足でした。
リンクしていただいたページをじっくり読ませていただきます。
また機会がありましたらぜひよろしくおねがいたします。

お礼日時:2014/05/18 16:11

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