我是一个初学者在文件包括代码,所以请有人帮助我。这是我的代码看起来像。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define first_ten_hours 7.99;
#define after_ten_hours 1.99;
double charges_all(int hour);
double charges_avg(int money, int hour_use);
double round_money(double sum);
int main()
{
FILE *f_read, *f_write;
f_read = fopen("usage.txt", "r");
f_write = fopen("charges.txt", "w");
if(f_read == NULL)
{
printf("Error to open the file.\n");
return 1;
}
char date[2][10];
char studenid[10][100];
double using_hour[10];
int current_line = 1;
for(int i = 0; i < 11; i++)
{
if(current_line == 1)
{
fscanf(f_read, "%s %s", date[0], date[1]);
current_line++;
}
else
{
fscanf(f_read, "%s %lf", studenid[i], &using_hour[i]);
current_line++;
}
}
current_line = 1;
for(int i = 0; i < 11; i++)
{
if(current_line == 1)
{
printf("%s %s\n", date[0], date[1]);
current_line++;
}
else
{
printf("%s %lf\n", studenid[i], using_hour[i]);
current_line++;
}
}
fclose(f_read);
fclose(f_write);
return 1;
}
在current_line = 1;
之后,我打印检查并查看问题。
这是我的文本文件。
12 2022
18010 4.5
92052 3.2
01051 7.4
11052 6.3
13052 5.5
01081 2.2
65052 1.3
94052 2.8
32052 3.7
41051 4.9
这是printf
循环的输出:
41051 2022
18010 4.500000
92052 3.200000
01051 7.400000
11052 6.300000
13052 5.500000
01081 2.200000
65052 1.300000
94052 2.800000
32052 3.700000
41051 4.900000
但我想要的是第一行的第一个字符串是12。
1条答案
按热度按时间6ie5vjzr1#
因为您编写
for
循环的方式(s),则您正在访问studenid
和using_hour
数组的元素,这些元素在这些循环的最后一次迭代中超出了界限(即,当i
为10时-[10]
处的元素超过用10个元素声明的数组的末尾)。这种“错误访问”导致未定义的行为,这可能包括覆盖先前读入date
数组元素的值。一个“快速修复”方法是将
[i]
索引(全部)更改为[i - 1]
。然而,更好的方法是将第一行的读取放在循环之外,然后对接下来的10行运行这些循环: