【问题标题】:C: save values from a text file to a memory fieldC:将文本文件中的值保存到内存字段
【发布时间】:2015-09-06 12:17:09
【问题描述】:

我正在尝试打开一个文本文件并将浮点值保存到特定的内存地址,以便在汇编程序中使用它们。 我的问题是我对文本文件中值的格式有限制:

if(sscanf(line,"%f  mm  %f  mm", 
  &data1[linesread], &data2[linesread]) != 2)
{
    fprintf(stderr, "Error in line: %s\n",line);
    fprintf(stderr, "Aborted.");
    break;
}

sscanf() 中的%f mm %f mm 代表什么?

%f 表示该行的第一个和第二个值必须是浮点值,但我不明白“mm”是什么意思。

当我尝试读取格式如下的行时:

5.0 2.0

我总是得到:

Read: 5.0 2.0
Error in line: 5.0 2.0

Aborted.

【问题讨论】:

  • 输入字符串应该像:42.0 mm 23.4 mm(每个值/单位之间有两个空格)。
  • 空格的数量无关紧要,但mm当然应该在那里。
  • 请注意,使用编写的代码,您永远不会发现第二个mm 是否不存在,但第一个mm 必须存在。由于格式字符串中的空格表示数据字符串中的“可选空格”,因此该格式的有效输入字符串可以是999mm999.9 mm 10.10 mm 甚至99.999999999999999999999999999999E-99 mm 0xA4P-9 Zanzibar(第二个数字字符串是十六进制浮点数value,相当于0.3203125——这对每个人来说都是直观的;好吧——我作弊并编写了一个程序来找出值是什么)。

标签: c file-io text-files scanf


【解决方案1】:

也许你可以试试这个

if(sscanf(line, "%f %f", &data1p[linesread], &data2[linesread]) != 2)

【讨论】:

    【解决方案2】:

    您的代码和输入文件都需要同意是否应该存在 mm。

    正如 Jurica 所说,从您的代码中删除两个毫米。或者,您可以尝试 Paul 在您的输入文件中添加两个 mm 的建议。您的正确解决方案取决于输入文件的格式限制。

    我的猜测是 mm 表示毫米,这可能是您数据的单位。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      相关资源
      最近更新 更多