【发布时间】:2017-12-13 02:25:41
【问题描述】:
我正在尝试读取冒号后的数字并将值存储在变量中,但是当我打印它时,它会打印一个随机的 6 位数字。我只需要存储值,而不是'ms'或'degrees'。
例如,文本文件与此类似,但重复了 100 组值:
time: 20 ms
temperature: 50.5 degrees
lightvalue: 30
value1: 0.59
value2: 1
value3: 0
----------------------
time: 40 ms
temperature: 37 degrees
lightvalue: 10
value1: 1.57
value2: 0
value3: 1
----------------------
我想将每个数字存储在一个单独的变量中。
这是我的代码的一部分:
int time[10];
double temperature[10];
int lightvalue[10];
double value1[10];
int value2[10];
int value3[10];
for (int i = 0; i < 100; i++) {
fscanf(infile, "time: %i", &time);
fscanf(infile, "temperature: %d", &temperature);
fscanf(infile, "lightvalue: %i", &light);
fscanf(infile, "value1: %d", &val1);
fscanf(infile, "value2: %i", &val2);
fscanf(infile, "value3: %i", &val3);
//how to skip the "---------------" line?
}
【问题讨论】:
-
没有人在阅读
"ms"。fscanf(infile, "time: %i", &time);-->if (fscanf(infile, " time: %d ms", &time[i]) == 1) Success();或更好,第一次使用fgets()。 -
提示:当代码没有按预期读取输入时,确保代码检查来自
fscanf()的返回值。 -
使用错误的格式说明符和 scanf 参数(在每一行上)会导致未定义的行为
-
阅读带有
fgets()的行;使用sscanf()扫描行。获取正确的类型(温度是double;使用%lf读取该值)。正确使用数组:&time[i]、&temperature[i]等。正确拼写 -value1已定义;val1引用。通过阅读和忽略以破折号开头的线条来跳过破折号。通过阅读和忽略仅包含空白(或什么都不包含)的行来跳过空白行。注意fgets(),包括换行符——这几乎无关紧要。检查每个sscanf()的结果。当数组大小为 10 时,不要从 0 循环到 100。等等。 -
你了解结构了吗?我假设不是。如果你有,这需要使用结构类型(或结构类型的数组)。