2010-05-10 27 views
0

我有这个代码昨天工作,但它似乎我编辑了一下,失去了工作版本。我不能让这个工作了。每次程序从文件扫描矩阵时,都会跳过一行!

我基本上想要从.txt文件中扫描矩阵。但每次扫描的第一行时间,第二个被跳过,并且它读取第三代替:(

这是我的代码:

for(i=0;i<=test->rowmat1;i++){ 
     for(j=0;j<=test->colmat1;j++){ 
     fscanf(fin,"%f\t",&test->mat[i][j]);         
     } 
    fscanf(fin,"%*[^\n]",&test->mat[i][j]); 
    } 

例如,对于矩阵:

1.00 2.00 3.00  
4.00 5.00 6.00  
7.00 8.00 9.00  
10.00 11.00 12.00 

如果我提取3行3周的cols,我得到:

1.00 2.00 3.00 
7.00 8.00 9.00  

然后失败了,它要跳过的塞康d线但没有什么后10 11 12

为什么它停止工作?我有什么错误?

@Derek:去除第二scanf函数,我得到了3矩阵

1.00 2.00 3.00  
4.00 5.00 6.00  
7.00 8.00 9.00  
10.00 11.00 12.00 

1.00 2.00 3.00  
5.00 6.00 7.00 
9.00  10.00 11.00 

的最后一个数字被跳过提取3:提前小号

请帮帮忙,谢谢 。

+0

如果test-> rowmat1 = 3且test-> colmat1 = 3,那么这将读取四个值,而不是三个值。 – 2010-05-10 00:28:59

+0

@Kinopiko,谢谢你的回复。你究竟是什么意思?它将如何读取4个值?在3和3时,它将读取3个值:S – NLed 2010-05-10 00:40:42

+0

'i = 0;对于i = 0,1,2和3,i <= 3'是正确的,所以这将读取四个值。 – 2010-05-10 01:34:25

回答

2

根本不是c专家。但是当你在内循环之后去做第二个fscand()时,j不会等于3吗?而不是2.这会如何影响fscanf()?

+0

试图修复它几次...没有适用于所有场合 – NLed 2010-05-10 17:43:09

1

我认为问题是循环边界。可能test-> colmat1是3,因为您正在阅读3列的矩阵。但是你的内循环运行四次,因为对于j = 3,j < = 3是正确的。所以内部fscanf()被执行四次,跳过第二行的第一个值。然后外部fscanf()被执行,并且直到“\ n”读取,所以完整的第二行被忽略。

循环边界可能设置为

​​

代替

j<=colmat 

解决您的问题。或者用test-> colmat代替colmat。

此外,在j循环外使用j看起来有点危险。