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

解決済みの質問

C言語初心者の質問 fscanf

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;
}

投稿日時 - 2014-05-18 13:56:23

QNo.8600253

困ってます

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

ディレクトリーを読むなら、
http://www.geocities.co.jp/SiliconValley-Cupertino/4084/Cprogram/myls.html

こういうふうにします。

投稿日時 - 2014-05-18 15:51:53

お礼

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

投稿日時 - 2014-05-18 16:11:50

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

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

回答(4)

ANo.3

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

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

投稿日時 - 2014-05-18 14:25:39

ANo.2

#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;
}

これで動きますね。

投稿日時 - 2014-05-18 14:04:30

ANo.1

fp=fopen(".\\data","r");  これはフォルダーですよね。
fp=fopen(".\\data\\hoge.txt","r"); こうしないと。

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

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

投稿日時 - 2014-05-18 14:01:04

補足

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

~dataフォルダ内~

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

~~~~~~~~~

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

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

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

投稿日時 - 2014-05-18 14:17:34

あなたにオススメの質問