行列の読み込みについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dai

行列の読み込みについて

#1

投稿記事 by dai » 16年前

縦500、横400という行列を読み込もうと思っています。
縦は、繰り返し文(while)で番号がつくのですが、横についてうまく番号を付ける方法がわかりません。
要は、

2 3 4 5
4 5 5 6
5 4 8 3

といった行列をma[j]で呼び出せるようにしたいのですが、jをどうすればよいかわかりません。

このようなプログラムを書いてみたのですが、
seihouka-test4.txtは 5 2 3 4 6
という一行のものです。


#include <stdio.h>

int main(void)
{
FILE *finput;

int i,j,a;
int ma[8];
char str[100];

finput=fopen("seihouka-test4.txt","r");

i=0;
while(i<=2){
if(NULL==fgets(str,100,finput))
break;
for(a=0,j=0;a<=7,j<=7;a++,j++){
sscanf(&str[a],"%1d",&ma[j]);
}
i++;
}

printf("%d %d %d %d %d\n",ma[0],ma[1],ma[2],ma[3],ma[4]);

fclose(finput);

return(0);
}

出力結果は 5 2 2 3 3
となぜか二つ目以降2回繰り返してしまいます。

どなたか解決方法を教えていただけませんでしょうか?
よろしくお願いします。

SCI

Re:行列の読み込みについて

#2

投稿記事 by SCI » 16年前

コード中に二次元配列がないんですけど、使わないんですか?
それと、コードは
タグで括って掲載して貰えると嬉しいです。その方が多くの回答を得られると思いますよ。

バグ

Re:行列の読み込みについて

#3

投稿記事 by バグ » 16年前

whileループでも出来ますが、今回のような場合はforループの方が分かり易いように思いますよ(^-^)
int i, j;
for (i = 0; i < 500; ++i)
{
	for (j = 0; j < 400; ++j)
	{
		/* ここに目的の処理を書き込む */
	}
}

dai

Re:行列の読み込みについて

#4

投稿記事 by dai » 16年前

申し訳ありません。
はじめは簡単に・・・ということで一行にしたのですが・・・
プログラムを書き換えます。
seihouka-test1は

3 5 7 4 2
4 2 1 8 4
2 7 6 4 6
1 3 5 9 2

というものです。

#include <stdio.h>

int main (void)
{
FILE *finput; /*普通の行列 4*5 */

int i,j,a;
int ma[6][7];
char str[100];

finput=fopen("seihouka-test1.txt","r");

i=0;
while(i<=4){
if(NULL==fgets(str,100,finput))
break;
for(j=0,a=0;j<=5,a<=5;j++,a++){
sscanf(&str[a],"%1d",&ma[j]);
}
i++;
}

for (i=0;i<=3;i++){
for (j=0;j<=5;j++)
printf(" %2d",ma[j]);
printf("\n");
}

fclose(finput);

return(0);
}

この出力結果は

3 5 5 7 7 4
4 2 2 1 1 8
2 7 7 6 6 4
1 3 3 5 5 9

と、どうしても2文字以降2回繰り返してしまいます。
解決法のほう、よろしければよろしくお願いします。

toyo

Re:行列の読み込みについて

#5

投稿記事 by toyo » 16年前

2個ずつ並ぶのは空白の部分で重複するからです
str[ 0 ]
5□2□3□4□6 => 5
str[ 1 ]
□2□3□4□6 => 2
str[ 2 ]
2□3□4□6 => 2
str[ 3 ]
□3□4□6 => 3
str[ 4 ]
3□4□6 => 3

個数が決まってるならforの2重ループでfscanf( )とか

SCI

Re:行列の読み込みについて

#6

投稿記事 by SCI » 16年前

いくつか仕様を挙げてみてはどうでしょう。

・行数と列数は固定か、可変か
・数字は必ず半角スペース1つで区切られるか
・数字の桁数は任意か、また小数を含むか

dai

Re:行列の読み込みについて

#7

投稿記事 by dai » 16年前

いろいろな方法を挙げてくださってありがとうございます。
for文のaの増やし方が間違っていたようです。
それで解決しました。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る