2013-03-22 59 views
2

我正在尝试编写一个程序,该程序从.txt读取行并将它们输入到2个不同的数组中。如何从.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; 
    } 

我试图读取TXT是:

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 

EDIT 2

w ^之后我需要处理的数字是将第一个数字与第二个数字在同一行中分开,乘以10,然后根据数字显示“*”。所以它会打印出这样的样子:

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

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

回答

0

namegrade是数组 - 变量的地址对于数组是隐式的。所以地址运算符不应该用于这些变量。

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

这是你的主要问题:

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

你想打印一个指针作为浮动。你想要grade[0]

在这一行:

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

这是可行的,但它是不正确的。它应该是&grade[0]或者仅仅是grade

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

要读取数据,您需要更改程序。您可以声明gradegrade[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 
     } 
    } 
+0

fscanf(ifp,“%f”,&grade);在技​​术上也是正确的。作为&grade == grade。 – 2013-03-23 00:06:15

+0

@Armin,事实并非如此。 &grade是指向数组的指针,_not_不是元素。 – teppic 2013-03-23 00:07:10

+0

去试试看,检查地址和等级和等级,它是一样的。 – 2013-03-23 00:08:13

相关问题