【问题标题】:copying integers into an array using fscanf(). in C使用 fscanf() 将整数复制到数组中。在 C 中
【发布时间】:2012-10-27 17:55:12
【问题描述】:

我有一个包含多行 10 个整数的文件。

我想将这些整数复制到几个数组中,命名为 line1、line2、line3 等,其中包含相应数组中每一行的数字。

我正在使用

fscanf(items, "%d, %d, %d, %d, %d, %d, %d, %d, %d, %d", &line1[0], &line1[1], &line1[2], &line1[3], &line1[4], &line1[5], &line1[6], &line1[7], &line1[8], &line1[9]);

将前 10 个整数分配给名为 line1 的数组。

这是一种非常草率的方法,它没有解决将其余值分配给其他数组的另一个问题。

任何关于如何更整齐地为数组分配 10 个值以及如何将每一行分配给不同数组的建议将不胜感激!

谢谢

【问题讨论】:

  • 是否有可能一行并不总是包含 10 个 int 值?

标签: c arrays scanf


【解决方案1】:

你需要使用循环。

#include <stdio.h>

for (size_t i = 0; i < 9; ++i)
     fscanf("%d, ", &line1[i]);
fscanf("%d", &line[9]);

如果有一个二维数组会更好。

int a[NLINES][NCOLUMNS];

for (size_t i = 0; i < NLINES; ++i) {
   for (size_t j = 0; j < NCOLUMNS - 1; ++j)
        fscanf(fp, "%d, ", &a[i][j]);
   fscanf(fp, "%d\n", &a[i][NCOLUMNS - 1]);
}

【讨论】:

  • 我投了反对票,因为另一个答案有完全相同的错误,巧合?
【解决方案2】:

使用多维数组和嵌套循环:

#DEFINE COLS 10
#DEFINE ROWS 10

int i, j;
int line[ROWS][COLS];

for (i = 0; i < ROWS; ++i) {
  for (j = 0; i < COLS - 1; ++j) {
    fscanf(items, "%d, ", &line[i][j]);
  }
  fscanf(items, "%d", &line[i][COLS - 1]);
}

编辑:

上面的代码使用与问题相同的格式字符串(逗号分隔值)。 如果空格分隔的值没问题,您可以对每行的最后一项使用不带单独 fscanf 的直接循环:

#DEFINE COLS 10
#DEFINE ROWS 10

int i, j;
int line[ROWS][COLS];

for (i = 0; i < ROWS; ++i) {
  for (j = 0; i < COLS; ++j) {
    fscanf(items, "%d", &line[i][j]);
  }
}

旁注:

如果您想编写检测输入文件中错误的代码,您需要检查来自fscanf 的返回值。可能在学校项目中不需要,但在工业强度代码中需要。

【讨论】:

  • 因为该行的最后一位数字后面不会有逗号
  • 你刚刚忘记了fscanf 的第一个参数。 ;-)
  • @mux:有关第二个scanf 的解释,请参见上面的编辑。 @Kirilenko:谢谢。固定!
【解决方案3】:

如果你知道你有多少行,比如 100,你可以:

int arr[r][c];

for (i=0; i<r; i++) {
    for (j=0; j<c-1; j++) {
        fscanf(file, "%d, ", &arr[i][j]);
    }
    fscanf(file, "%d\n", &arr[i][j]);
}

【讨论】:

  • +1 尽管如此,即使他不知道确切的大小(C99 可变长度数组 或动态分配),他也可以使用它但是是的,同意
  • @AdelQodmani 对,但我通常不喜欢使答案复杂化,除非确实需要,谢谢 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多