【问题标题】:How do i extract the numbers from this input format?如何从这种输入格式中提取数字?
【发布时间】:2021-10-28 15:02:39
【问题描述】:

我需要像我突出显示的行一样“扫描”。我如何提取数字?我在课程的开始,所以不要发布我可能还没有研究过的过于复杂的解决方案。

输入(房屋成本、首付、储蓄、储蓄年利率、抵押贷款年利率、 工资、部分储蓄、年薪、房租):

(600000, 0.15, 50000, 0.02, 0.03, 10000, 0.3, 0.03, 2000)

C 语言。

【问题讨论】:

  • 欢迎您,请发帖Minimal Reproducible Example 以展示您到目前为止所做的尝试。也就是说,尝试输入和扫描数据,并打印提取的值。
  • @WeatherVane 只写了 printf 行。不知道如何扫描。
  • 您可以探索fgetssscanf 函数。
  • @noornapso "只写了 printf 行" --> 发布该代码。

标签: c input


【解决方案1】:

如何提取数字?

简单的方法是用fgets()读取行,然后用sscanf()"%n"解析,记录扫描的偏移量,如果它走了那么远。

(,) 分隔符附近使用允许空白的格式。
"%lf" 已经占用了前导空白。

  #define EXPECTED_SIZE 100
  char buffer[EXPECTED_SIZE * 2];  // Be generous in buffer size

  // Was a line successfully read?
  if (fgets(buffer, sizeof buffer, stdin)) {

    // Example code simplified to 3 variables
    double House_cost, down_payment, savings;
    int n = 0;
    sscanf(buffer, " (%lf ,%lf ,%lf ) %n",
        &House_cost, &down_payment, &savings, &n);
    // Did scanning reach the %n and was that the end of the line?
    if (n > 0 && buffer[n] == '\0') {
      Success();
    } else {
      Failed();
    }
  }

good 解析器已准备好检测错误输入。不要假设输入格式正确。

【讨论】:

    【解决方案2】:

    有一组 C ANSI 标准库函数可将字符数据转换为数值数据。这些在 stdlib.h 头文件中,分别是 atoi()、atof()、atol()、atoll()。这些函数将 alpha 转换为整数、双精度浮点数、长整数和长整数数据类型。

    如果不熟悉 C 语言,请参考 GNU C/C++ 编译器的在线文档...GNU C Run-Time Library Reference

    GNU C Compiler and Language Reference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 1970-01-01
      • 2013-08-06
      相关资源
      最近更新 更多