C言語関係掲示板

過去ログ

No.1197 テキストファイルの内容を2次元配列に読み込む

[戻る] [ホームページ]
No.15674

ファイルの読み込み
投稿者---れごば(2004/07/20 01:03:09)


5 3
0 0
5 2
90000
01262
01102

上のように書かれているファイルtest.txtがあり、
一行目は4行めからの数列の桁数と行数を表しています。
ファイルをオープンしたあと1行目の5を「yoko」へ
3を「tate」へ代入し、
2、3行目も同じようにそれぞれの変数へ代入します。

また、4行目以降は
aa[0][0]=9 aa[0][1]=0・・・・aa[2][4]=2
のように一文字ずつ配列に入れていきたいのですが、

1〜3行目のスペースの飛ばし方と
配列への入れ方を教えてください。


No.15675

Re:ファイルの読み込み
投稿者---かずま(2004/07/20 01:22:27)


> 1〜3行目のスペースの飛ばし方と
> 配列への入れ方を教えてください。
scanf の "%d" を使えば、スペースや改行を読み飛ばしてくれます。
1文字ずつ読み込ませるためには "%1d" を使えばよいでしょう。 

tate と yoko に制限をつけてよいのなら、次のようなプログラムになります。
無制限にしたいというのなら、プログラムは難しくなります。

#include <stdio.h>

#define N  64

int main(void)
{
    int i, j, yoko, tate, v1, v2, v3, v4, aa[N][N];
    FILE *fp = fopen("text.txt", "r");

    if (fp == NULL) return 1;

    if (fscanf(fp, "%d%d", &yoko, &tate) != 2) return 1;
    if (yoko > N || tate > N) return 1;
    if (fscanf(fp, "%d%d%d%d", &v1, &v2, &v3, &v4) != 4) return 1;

    for (i = 0; i < tate; i++)
        for (j = 0; j < yoko; j++)
            if (fscanf(fp, "%1d", &aa[i][j]) != 1) return 1;
    
    for (i = 0; i < tate; i++) {
        for (j = 0; j < yoko; j++)
            printf(" %d", aa[i][j]);
        printf("\n");
    }
    return 0;
}



No.15678

Re:ファイルの読み込み
投稿者---れごば(2004/07/20 02:03:49)


ありがとうございます。
tateとyokoのに入る数には制限があるのでこのプログラムでいいと思います。

書き込みは出来たのに読み込みが出来なくて困っていたので助かりました。