dポイントプレゼントキャンペーン実施中!

タイトルのとおりCで行列をファイルから入力する方法がわからず困っています。
わかる方いらっしゃったらお願いいたします。

A 回答 (4件)

3行8列の0/1のみ、という前提の例示です。


エラーチェックはしてないので適当に入れてください。
--
#define ROWS 3
#define COLUMNS 8

FILE *fp;
char matrix[ROWS][COLUMNS];
int i, j;
fp = fopen(ファイル名, "r");

for(i = 0; i < ROWS; i ++)
{
fscanf(fp, "%s\n", matrix[i]);
for(j = 0; j < COLUMNS; j ++)
{
matrix[i][j] -= '0';
}
}
fclose(fp);
--
「行列要素は全部一桁」が前提なので二桁以上の場合はやり方を変える必要があります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
うまく読み込むことができました!

お礼日時:2008/09/24 13:52

一気に変数へ読み込もうとすると分からなくなってしまうと思います



1) 1行読み込む
2) 読み込んだデータを各桁で処理する
3) ファイルの終端でなければ 1)に戻る
をコードにしてみましょう

char lbuf[32] = {0}; // ちょっと大目の行バッファ
char a[3][8] = {0}; // 読み込み後のデータ格納変数
int nLine = 0; // a[n]のカウンタ
int nLen = 0; // 行バッファの長さ検査用

while( fgets( lbuf, sizeof( lbuf ), fp ) ) {
  nLen = strlen( lbuf ) - 1;
  if ( nLen < 0 || nLen > 8 ) {
    // 読み込んだデータの長さチェック
    fprintf( stderr, "DataError\n" );
    break;
  }
  if ( lbuf[nLen] == '\n' ) {
    // 改行が付いているなら削除
    lbuf[nLen] = 0;
  }
  for ( int n = 0; n < nLen; n++ ) {
    // 各桁の処理
    a[nLine][n] = lbuf[n] - '0';
  }
  // 次の行の準備
  nLine++;
}
といった具合です
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
たしかに一気にやろうとしたのが混乱を招く原因でした。
この経験を今後に生かしていきたいと思います!

お礼日時:2008/09/24 13:58

バイナリで書き出して読み込むというのはどうでしょうか?


以下に動作テストはしていませんが、バイナリでのファイル操作の例を載せます。

#include<stdio.h>

#define R 3
#define C 3

int main( )
{
int i, k ;
FILE *fp = NULL ;

int mat[ R ][ C ] = { { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 } } ;
int tmp[ R ][ C ] ;

fp = fopen( "out.txt", "wb" ) ;
fwrite( mat, R * C, sizeof( int ), fp ) ;
fclose( fp ) ;

fp = fopen( "out.txt", "rb" ) ;
fread( tmp, sizeof( int ), R * C, fp ) ;
fclose( fp ) ;

for( i = 0 ; i < R ; i ++, puts( "" ) )
for( k = 0 ; k < C ; k ++ )
printf( "%d", tmp[ i ][ k ] ) ;
}
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
バイナリファイルについての知識が不足しているため、試すことができませんでしたが、今後、勉強して生かしていきたいと思います!

お礼日時:2008/09/24 13:55

ファイルIOなどすべて説明するのは不可能ですよ


C言語のの入門書に基本的なファイルIOはのっているはずです
それを参考に作ってみたコードを投稿してみましょう

お使いの開発環境のバージョンやエディション、お使いのOSの情報
などと
どのようなデータをどこからどのようにして何に読み込むのかを具体的に質問しましょう

CSVファイルを配列に 行、列として読み込みたい
現状 かくかくしかじか のソースにて読み込んでいるが
期待する結果にならない

元データ
a,b,c,d
a,c,d,e
a,d,g,h

実行時の読み込みデータ
abcd
acde
adgh

など具体的にしましょう

この回答への補足

回答ありがとうございます。
Visual C++を使っています。
テキストファイルに入力された0と1の組合せを読み込みたいです。

元データ
01010101
10101010
11010010

読み込み後
a[0][0]=0,a[0][1]=1,,,,,a[2][7]=0

のようにしたいです。
入門書には配列のファイル読み込みは載っているですが二次元配列の場合は、どのようにすれば良いのかわかりません。

つたない説明ですがよろしくお願いいたします。

補足日時:2008/09/22 14:14
    • good
    • 0

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