当前位置: 首页 > 知识库问答 >
问题:

fscanf与二维整数数组

俞博涛
2023-03-14

免责声明:我是一个苦苦挣扎的初学者

我的任务是从输入txt文件中读取整数到2D数组中。当我使用printf的调试/测试我的fscanf没有从文件中读取正确的值。我不明白为什么。

我的代码如下:

void makeArray(int scores[][COLS], FILE *ifp){
    int i=0, j=0, num, numrows = 7, numcols = 14;

    for(i = 0; i < numrows; ++i){
        for(j = 0; j < numcols; ++j){
            fscanf(ifp, "%d", &num);
            num = scores[i][j];
        }
    }
}

int main(){
    int scoreArray[ROWS][COLS];
    int i=0, j=0;
    FILE *ifp;
    ifp = fopen("scores.txt", "r");

    makeArray(scoreArray, ifp);

    system("pause");
    return 0;   
}

共有1个答案

贺善
2023-03-14

您正在将num(从文件中读取的内容)赋值到数组scores[i][j]的值中,该数组向后执行。下面的代码将在每个数字之间读取任意数量的空格,直到到达文件末尾。

void makeArray(int scores[][COLS], FILE *ifp) {
    int i=0, j=0, num, numrows = 7, numcols = 14, ch;

    for (i=0; i < numrows; ++i) {
        for (j=0; j < numcols; ++j) {
            while (((ch = getc(ifp)) != EOF) && (ch == ' ')) // eat all spaces
            if (ch == EOF) break;                            // end of file -> break
            ungetc(ch, ifp);
            if (fscanf("%d", &num) != 1) break;
            scores[i][j] = num;                              // store the number
        }
    }
}

这篇Stack Overflow文章详细介绍了这个问题。

 类似资料:
  • 到目前为止,这就是我得到的,但我不太确定接下来该怎么办。我(认为)这里发生的是,它到达数组的第一个位置,在0,0处,并生成一个数字。然后转到1,1和2,2,依此类推。我不确定该从那里开始,我相信有一种更有效的方法可以一次填充整行或整列。 此外,我的编译器不允许我像平时一样使用cout或endl?它坚持我使用std::cout,我只是想知道为什么。

  • 我正在编写一个计算和绘制抛物线的小程序。但我在程序中有一小部分需要计算valuetable。 二次函数如下:

  • 二维数组 #include <stdio.h> #include <stdlib.h> //01.二维数组: // 1.二维数组的内存存储原理: // 所有数组,无论一维数组,二维数组,多维数组,在内存当中的 // 存储实质都是采取的连续存储方式 // 2.二维数组的规律赋值方式: // 先进行行遍历,在进行列遍历,再逐个进行逐个数组元素的具体赋值操作 //

  • 主要内容:创建二维数组,初始化二维数组,获取单个元素,获取全部元素,获取整行元素,获取整列元素为了方便组织各种信息,计算机常将信息以表的形式进行组织,然后再以行和列的形式呈现出来。二维数组的结构决定了其能非常方便地表示计算机中的表,以第一个下标表示元素所在的行,第二个下标表示元素所在的列。下面简单了解一下二维数组,包括数组的声明和初始化。 创建二维数组 在 Java 中二维数组被看作数组的数组,即二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。Java 并不直接支持二维数组,但是

  • 对于我的类分配,我们需要编写一个名为Matrix的类,其中包含一个名为“矩阵”的私有二维int数组,最多可以是10行乘10列。我们需要使用两个常量MAXROWS=10和MAXCOLS=10来构造“矩阵”。Matrix类还需要以下属性: 行和列将包含小于等于MAXROWS和MAXCOLS的值。编写一个默认的matrix类构造函数,用以下值构造“Matrix”数组: 构造函数还必须设置行和列变量以匹配

  • 我正在尝试使用fscanf加载一些结构数组的默认值,这看起来像 数据按如下方式存储在文本文件中(使用不同的值重复多次): 我用fscanf/fscanf_s(尝试两者)读取的值如下: 然而,VS2012在最后抛出了一个异常,称列表已损坏。调试显示,在阅读了上述示例文本的前四行后,结构的“map”部分包含以下内容 其中X是未初始化的值。 似乎fscanf正在试图“null terminate”我的整