ファイルの内容を行列に抽出しようとしていますが、ファイルがまったく違って見える場合があります。fgetsとstrtokをダブル "for"ループに入れよう
例として、これらのファイルはすべて同じ結果をもたらすはずです:1,2,3,4,5,6,7,8,9を含む3x3の行列。
1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 8 9
1 2 3 4
5
6
7 8
9
1 2 3
$something
$something else
4 5 6
$something else else
7 8 9
うまくいけば、私はの寸法を知っています現在のプロセスでこれらの行が無視されることを示す "$"文字と同様に、事前に定義されています。
fscanfを使用している私の現在のアルゴリズムはうまく動作しますが、 "$ something"行では動作しません。
私はfgets/strtok/sscanfメソッドを使うべきだと考えましたが、いくつかの問題があります。
// File* file (already assigned)
char line[32]; //assuming 32 is enough
char* token;
fgets(line,32,file);
token = strtok(line," \t");
for (y=0; y<ySize; y++)
{
for (x=0; x<xSize, x++)
{
if (token[0] == '$') //should use a str function
{
fgets(line,32,file);
token = strtok(line," \t")
x--;
}
else
{
if (we are at the end of the line)
{
fgets(line,32,file);
token = strtok(line," \t")
}
sscanf(token,"%d",&matrix[x][y];
token = strtok(NULL," \t");
}
}
}
基本的に私は私の方法で、「もし(我々が行の末尾にある)」の状態といくつかの入力を書き込むためのいくつかの助けをしたいのですが、それは完璧ですか!私はプロセスを正しく考えましたか?
ありがとうございます。
['strtol()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/strtol.html)をご覧ください。第2引数を使用して、行全体を通るコールチェーンを設定できます。 – pmg
コメントは完全な行だけですか、 '1 2 $ ignore'のような行は許可されますか? –
1 2 $無視することはできません。しかし基本的には、毎回 'token == $'を呼び出さなければなりません(まだトークンとすべてのことについていくつかの研究があります)。 1 $無視することもできません。 – Sword22