从文件

时间:2016-05-02 17:15:07

标签: c arrays

我写了这段代码,但不知怎的,它不起作用。它应该在黑屏上显示这些数据:

  1. 187 52 166 297
  2. 37 70 212 27
  3. 20 179 112 45
  4. 244 121 308 19
  5. 251 33 212 35
  6. 代码有什么问题?

    int main()
    {
        int arr[5][4], i, j, c;
        FILE *inp;
        inp = fopen("votes.txt", "r");
        for (i = 0; i < 5; i++) {
            for (j = 0; j < 4; j++)
            {
                c = fscanf(inp, "%d", &arr[i][j]);
                arr[i][j] = c;
            }
        }
        fclose(inp);
        for (i = 0; i < 5; i++) {
            for (j = 0; j < 4; j++) {
                printf("%d\t", arr[i][j]);
                printf("\n");
            }
        }
    }
    

1 个答案:

答案 0 :(得分:3)

fscanf返回填充的元素数 - 而不是它填充到变量中的值。读取的值通过pointer-argument直接写入变量(即&arr[i][j])。

所以而不是

c=fscanf(inp,"%d",&arr[i][j]);
arr[i][j] = c;

你的代码应该是:

if (1 != fscanf(inp,"%d",&arr[i][j]))
{
    // something is wrong - fscanf didn't read an int
    ... error handling ...
}