【问题标题】:fscanf is duplicating numbers while reading from a filefscanf 在读取文件时重复数字
【发布时间】:2019-11-14 07:14:33
【问题描述】:

我正在尝试从文件中读取数字并将它们放入二维数组中,但每行的第一个数字被放入前一行的最后一个数字的位置。

输出应如下所示:

11  14  12  07  1   8.7
11  14  11  58  143 8.6
11  14  13  03  163 8.9
11  13  18  06  1   7.3

但结果是这样的:

11  14  12  07  1   11
11  14  11  58  143 11
11  14  13  03  163 11
11  13  18  06  1   7.3

这是将值放入数组的循环:

    double all_data[entry_counter-1][5];
    int col_counter = 0;
    int row_counter = 0;

    for(int i=0; i<=entry_counter/6-1; i++) {
        col_counter = 0;
        for (int j = 0; j <= 5; j++) {
            fscanf(input_file, "%lf\n", &v);

            all_data[row_counter][col_counter] = v;
            col_counter++;
        }
        row_counter++;
    }

【问题讨论】:

  • 没有minimal reproducible example,看起来像边界溢出场景。
  • 该数组每行只能容纳 5 个项目,索引从 0 到 4。但是 j 循环从 0 到 5 计数。顺便说一句,由于 @ 不需要单独的 col_counter 987654327@ 和 col_counter 始终具有相同的值。
  • 您是不是要使用&lt; 而不是&lt;=
  • double all_data[entry_counter-1][6]

标签: c arrays sorting scanf


【解决方案1】:

您的代码过于复杂和错误。

这应该可以完成工作:

int cols = 6;
int rows = entry_counter / cols;
double all_data[rows][cols];

for(int row_counter = 0; row_counter < rows; row_counter++) {
    for (int col_counter = 0; col_counter < cols; col_counter++) {
        fscanf(input_file, "%lf\n", &all_data[row_counter][col_counter]);
    }
}

保持简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2017-06-25
    • 2014-02-10
    • 2011-03-22
    相关资源
    最近更新 更多