【问题标题】:One row is skipped each time the program scans a matrix from file !每次程序从文件中扫描矩阵时,都会跳过一行!
【发布时间】:2010-05-10 00:20:19
【问题描述】:

我昨天有这个代码工作,但似乎我编辑了它并丢失了工作版本。我不能再让它工作了。

我基本上想从 .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    

然后失败,它想跳过第二行但是10 11 12之后什么都没有

为什么它停止工作?我有什么问题?

@Derek:删除第二个 scanf,我得到了提取 3 x 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

请帮忙, 提前致谢。

【问题讨论】:

  • 如果 test->rowmat1 = 3 和 test->colmat1 = 3,那么这将读取四个值,而不是三个。
  • @Kinopiko,感谢您的回复..您到底是什么意思?它将如何读取 4 个值?在 3 和 3,它将读取 3 个值:S
  • i = 0; i &lt;= 3 对于 i = 0、1、2 和 3 为真,因此这将读取四个值。
  • 我知道你在那里做了什么,但你能为我解释一下逻辑吗?我现在很困惑,因为我有另一个代码可以输入矩阵,我不需要这样做:S 请给我解释一下。

标签: c file file-io matrix


【解决方案1】:

根本不是 c 方面的专家。但是当你在内循环之后执行第二个 fscand() 时,j 不会等于 3 吗?而不是 2。这对 fscanf() 有何影响?

【讨论】:

  • 尝试修复它几次...在所有场合都不起作用
【解决方案2】:

我认为问题在于循环边界。可能 test->colmat1 是 3,因为您正在读取一个包含 3 列的矩阵。但是你的内部循环运行了四次,因为 j

可能将循环边界设置为

j<colmat

而不是

j<=colmat

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-10
    • 2014-01-31
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多