【问题标题】:How can I read separate numbers/lines from a .txt and input them to 2 different arrays如何从 .t​​xt 读取单独的数字/行并将它们输入到 2 个不同的数组
【发布时间】:2013-03-12 23:28:09
【问题描述】:

我正在尝试编写一个程序,从 .txt 读取行并将它们输入到 2 个不同的数组中。

到目前为止,我有这个:

    #include <stdio.h>

    int main() {
        FILE * ifp = fopen("input.txt","r"); 
        FILE * ofp = fopen ("output.txt", "w"); 
        int participants = 0, i;  
        char name [10];
        float grade [10];
        float perc [10];

        fscanf(ifp, "%d", &participants);

        for (i=1; i<participants; i++) {
             fscanf(ifp, "%s", &name);

             fscanf(ifp, "%f", &grade);

        }

        printf( "%d\n", participants);
        printf( "%s\n", name);
        printf( "%f\n", grade);

        fclose(ifp);
        fclose(ofp);

        return 0;
    }

我要阅读的文本是:

    2 
    Optimus 
    45 90 
    30 60 
    25 30 
    50 70 
    Megatron 
    5 6 
    7 9 
    3 4 
    8 10 

我的问题是它会拾取前 2 行,但在到达数字时停止。我正在尝试将名称放入一个数组中,并将所有数字成对放入不同的数组中。现在我只是想检查一下我是否正在拾取数组中的数字,但它并没有把它们全部拾起。

这是我得到的输出:

    2
    Optimus
    0.000000

有什么想法吗?

编辑

这是我修改后的新代码:

    #include <stdio.h>

    int main() {
        FILE * ifp = fopen("input.txt","r");
        FILE * ofp = fopen ("output.txt", "w");
        int participants = 0, i , j; 
       char name [10];
        int grade [26];
        float perc [26];

        fscanf(ifp, "%d", &participants);

        for (i=1; i<participants; i++) {
             fscanf(ifp, " %s", name);
             fscanf(ifp, " %d", grade);

        }

        printf( "%d\n", participants);
        printf( "%s\n", name);
        printf( "%d\n", grade[0]);

        fclose(ifp);
        fclose(ofp);

      return 0;
    }

我的新输出是:

    2
    Optimus
    45

编辑 2

稍后我需要对这些数字做些什么,将一行中的第一个数字与同一行中的第二个数字相除,再乘以 10,然后根据数字显示“*”。所以它会像这样打印出来:

    Optimus
    +:  *****
    -:  *****
    *:  ********
    /:  *******
    Megatron
    +:  ********
    -:  *******
    *:  *******
    /:  ********

“+”是名称下的第一行。 “-”是同名下的第二行。 “*”代表第三个。 “/”代表第四个。

【问题讨论】:

    标签: c


    【解决方案1】:

    这是你的主要问题:

        printf( "%f\n", grade);
    

    您正在尝试将指针打印为浮点数。你想要grade[0]

    在这一行:

        fscanf(ifp, "%f", &grade);
    

    这会起作用,但它不正确。它应该是&amp;grade[0] 或只是简单的grade

    当然,在您的最终版本中,您需要调整数组下标。您还需要为名称分配更多数组 - 目前只能存储一个。

    要读入数据,您需要对程序进行大量更改。您可以将grade 声明为grade[10][8](假设最多有10 个参与者),并将8 个整数中的每一个都存储在数组中。像这样的循环会处理它:

       for (i = 0; i < participants; i++) {
          fscanf(ifp, "%s", name);             // read the name (you need to fix this)
          for (j = 0; j < 8; j++) {
            fscanf(ifp, "%d", &grade[i][j]);   // store each number
          }
       }
    

    【讨论】:

    • fscanf(ifp, "%f", &grade);在技​​术上也是正确的。作为 &grade == 等级。
    • @Armin,不是。 &grade 是一个指向数组的指针,not 指向一个元素。
    • 去试试看&grade和grade的地址,是一样的。
    • 好的,所以我改变了它,现在它拿起第一个数字但停在那里。我怎样才能让它继续接收其他数字,当它到达名称时,它将它添加到“名称”数组中。
    • @Armin,我很清楚这一点,但它们不是同一类型。
    【解决方案2】:

    namegrade 是数组 - 变量的地址对于数组是隐含的。所以地址操作符不应该用于这些变量。

    fscanf(ifp, "%s", name);
    fscanf(ifp, "%f", grade);
    

    【讨论】:

      猜你喜欢
      • 2020-06-21
      • 2016-05-29
      • 1970-01-01
      • 2020-10-01
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多