【问题标题】:Get number after colon in C在C中获取冒号后的数字
【发布时间】: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", &amp;time); --> if (fscanf(infile, " time: %d ms", &amp;time[i]) == 1) Success(); 或更好,第一次使用fgets()
  • 提示:当代码没有按预期读取输入时,确保代码检查来自fscanf()的返回值。
  • 使用错误的格式说明符和 scanf 参数(在每一行上)会导致未定义的行为
  • 阅读带有fgets()的行;使用sscanf() 扫描行。获取正确的类型(温度是double;使用%lf 读取该值)。正确使用数组:&amp;time[i]&amp;temperature[i] 等。正确拼写 - value1 已定义; val1 引用。通过阅读和忽略以破折号开头的线条来跳过破折号。通过阅读和忽略仅包含空白(或什么都不包含)的行来跳过空白行。注意fgets(),包括换行符——这几乎无关紧要。检查每个sscanf() 的结果。当数组大小为 10 时,不要从 0 循环到 100。等等。
  • 你了解结构了吗?我假设不是。如果你有,这需要使用结构类型(或结构类型的数组)。

标签: c input scanf


【解决方案1】:

您的代码包含多个错误。您在迭代中使用了不同的变量名称。您使用了错误的说明符。

for (int i = 0; i < 2; i++) {
    fscanf(infile, "time: %d %*s\n", &time[i]);
    fscanf(infile, "temperature: %lf %*s\n", &temperature[i]);
    fscanf(infile, "lightvalue: %i\n", &light[i]);
    fscanf(infile, "value1: %lf\n", &val1[i]);
    fscanf(infile, "value2: %i\n", &val2[i]);
    fscanf(infile, "value3: %i\n", &val3[i]);
    fscanf(infile, "%*s\n"); // to skip the "---------------" line
}

要跳过该行的其余部分,您可以使用%*s,它将匹配未使用的字符串。

【讨论】:

猜你喜欢
  • 2021-09-09
  • 2011-05-25
  • 2018-05-04
  • 1970-01-01
  • 2022-01-06
  • 2017-04-22
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
相关资源
最近更新 更多