我正在尝试编写一个从.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
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
+: ********
-: *******
*: *******
/: ********
“+”是名称下的第一行。 “ - ”是同名下的第二行。 “*”代表第三名。 “/”为第四个。
答案 0 :(得分:1)
这是你的主要问题:
printf( "%f\n", grade);
您正尝试将指针打印为浮动。你想要grade[0]
。
在这一行:
fscanf(ifp, "%f", &grade);
这样可行,但不正确。它应为&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
}
}
答案 1 :(得分:0)
name
和grade
是数组 - 变量的地址对于数组是隐式的。所以地址运算符不应该用于这些变量。
fscanf(ifp, "%s", name);
fscanf(ifp, "%f", grade);