代码之家  ›  专栏  ›  技术社区  ›  NLed

每次程序从文件扫描矩阵时跳过一行!

  •  0
  • NLed  · 技术社区  · 14 年前

    我昨天让这段代码工作,但似乎我编辑了一点,失去了工作版本。我再也不能让它工作了。

    我基本上想从.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列,我得到:

    1.00    2.00    3.00
    7.00    8.00    9.00    
    

    然后失败了,它想跳过第二行,但是在10112之后什么都没有

    为什么它停止工作了?我怎么了?

    @德里克:去掉第二个扫描,我得到3乘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
    

    跳过最后一个数字:s

    请帮忙, 提前谢谢。

    2 回复  |  直到 14 年前
        1
  •  2
  •   drekka    14 年前

    一点也不懂C。但是当你去做内环之后的第二个fscand()时,j不等于3吗?,不是2。这对fscanf()有何影响?

        2
  •  1
  •   Gully    10 年前

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

    可能设置循环边界为

    j<colmat
    

    而不是

    j<=colmat
    

    解决你的问题。或者用test->colmat代替colmat也一样。

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