縦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回繰り返してしまいます。
どなたか解決方法を教えていただけませんでしょうか?
よろしくお願いします。
行列の読み込みについて
Re:行列の読み込みについて
コード中に二次元配列がないんですけど、使わないんですか?
それと、コードは
それと、コードは
タグで括って掲載して貰えると嬉しいです。その方が多くの回答を得られると思いますよ。
Re:行列の読み込みについて
whileループでも出来ますが、今回のような場合はforループの方が分かり易いように思いますよ(^-^)
int i, j; for (i = 0; i < 500; ++i) { for (j = 0; j < 400; ++j) { /* ここに目的の処理を書き込む */ } }
Re:行列の読み込みについて
申し訳ありません。
はじめは簡単に・・・ということで一行にしたのですが・・・
プログラムを書き換えます。
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回繰り返してしまいます。
解決法のほう、よろしければよろしくお願いします。
はじめは簡単に・・・ということで一行にしたのですが・・・
プログラムを書き換えます。
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回繰り返してしまいます。
解決法のほう、よろしければよろしくお願いします。
Re:行列の読み込みについて
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( )とか
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( )とか
Re:行列の読み込みについて
いくつか仕様を挙げてみてはどうでしょう。
・行数と列数は固定か、可変か
・数字は必ず半角スペース1つで区切られるか
・数字の桁数は任意か、また小数を含むか
・行数と列数は固定か、可変か
・数字は必ず半角スペース1つで区切られるか
・数字の桁数は任意か、また小数を含むか
Re:行列の読み込みについて
いろいろな方法を挙げてくださってありがとうございます。
for文のaの増やし方が間違っていたようです。
それで解決しました。
ありがとうございました。
for文のaの増やし方が間違っていたようです。
それで解決しました。
ありがとうございました。