从c中的二维数组中的文件写入数据

时间:2016-04-29 18:05:32

标签: c

只是一个先声夺人我仍然是整个编程中的菜鸟,我有一个基本的水平。 因此,我正在编写此代码以从文本文件中读取数据并将其显示在黑屏上。

我从这开始,但由于某种原因它不起作用!有人能帮我吗?

另外一件事,如果我想写这个城市和候选人的名字就像这张照片我怎么可能,因为它是一个只接受整数的数组?

  1. City Abdullah Omar Qusai Basel
  2. Alquds 187 52 166 297
  3. 希伯伦37 70 212 27
  4. Ramallah 20 179 112 45
  5. 伯利恒244 121 308 19
  6. Nablus 251 33 212 35
  7. enter image description here

    %name%

1 个答案:

答案 0 :(得分:7)

如果您正确缩进代码,您将能够更轻松地查看问题。

for (i=0; i<5; i++){
   for (j=0; j<4; j++)
      fscanf(inp,"%d",&arr[i][j]); // This ends the second for loop.

   // Then you are closing the file after one
   // run of the first loop.
   fclose (inp);
}

你需要:

for (i=0; i<5; i++){
   for (j=0; j<4; j++)
      fscanf(inp,"%d",&arr[i][j]);
}

// Move it out of the loops.
fclose (inp);

为了避免这样的问题,最好总是使用{}来限制循环,即使对于一个衬里也是如此。

for (i=0; i<5; i++){
   for (j=0; j<4; j++) {
      fscanf(inp,"%d",&arr[i][j]);
   }
}

其他问题

  1. 您需要添加代码才能跳过第一行。它没有相同格式的数据。

    添加功能

    void skipLine(FILE* in)
    {
       int c;
       while ( (c = fgetc(in)) != EOF && c != '\n');
    }
    

    并在阅读数据之前使用它。

    skipLine(inp);
    
  2. 您需要添加代码以从每行读取名称。

    name

    添加变量
    char name[200]; // Make it large enough
    

    并确保为每一行读取它。

    for (i=0; i<5; i++)
    {
       // Make sure to limit the number of characters being read.
       fscanf(inp, "%199s", name);
       for (j=0; j<4; j++)
       {
          fscanf(inp,"%d",&arr[i][j]);
       }
    }
    
  3. 使用索引ij是不对的。

    int a[4][5];
    
  4. i的有效值范围必须为0-3,而j的有效值范围必须为0-4。鉴于您需要的是5行数据:

        int a[5][4];
    

    检查fscanf

    的返回值

    作为一种良好做法,请务必检查fscanf的返回值。这将允许您捕获错误并帮助您解决从磁盘读取的问题。

    将读取数据的代码更改为:

        for (i=0; i<5; i++)
        {
           if ( fscanf(inp, "%199s", name) != 1 )
           {
              fprintf(stderr, "Unable to read the name\n");
              exit(EXIT_FAILURE);
           }
    
           for (j=0; j<4; j++)
           {
              if ( fscanf(inp,"%d",&arr[i][j]) != 1 )
              {
                 fprintf(stderr, "Unable to read the number from %d-th row and %d-th column\n", i, j);
                 exit(EXIT_FAILURE);
              }
           }
        }