我試圖將一個文件的內容提取到一個矩陣中,但該文件可能看起來完全不同。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)。您可以使用第二個參數來設置貫穿整行的呼叫鏈。 – pmg 2012-03-17 15:19:24
是隻評論全行,還是會允許像'1 2 $ ignore'這樣的行? – 2012-03-17 15:22:52
1 2 $忽略是不可能的。但bascially我只需要每次調用'token == $'(仍然有一些關於令牌和所有的研究)。 1 $ ignore 2也是不可能的。 – Sword22 2012-03-17 15:35:44