【问题标题】:How to make scanf() read in e or e^2 as input?如何使 scanf() 读入 e 或 e^2 作为输入?
【发布时间】:2018-10-07 13:04:56
【问题描述】:

你好~我只是 C 的初学者。我有一些代码如下:

#include<stdio.h>
#include<math.h>

...
scanf("%lf %lf", &A[I], &B[I])
...

我需要从键盘输入像 e 或 e^2 这样的数据。我尝试了“e”或“exp(1)”,但它们没有用。谁能给我一些建议?任何帮助表示赞赏!

【问题讨论】:

  • 不幸的是“他们没有工作”不是一个非常有意义的故障报告。您观察到哪些行为不符合您的哪些期望?
  • 顺便说一句,AB 是如何定义的?
  • 如果使用“e”你在Euler-Number之后你需要明确输入:2.71828182845904523536028747135266249775724709369995[...]
  • @alk - 尽管 double 仅适用于 20 位有效数字,因此输入所有这些数字将毫无用处,而不仅仅是 2.7182818284590452354
  • 您的转换说明符与您的输入不匹配。您似乎正在输入一个表达式(e 的 2 次幂),但 scanf 不是计算器。它允许使用电子表示法以 科学记数法 输入数字,允许 20e+2 表示 20 乘以 10 的 2 次方,但除此之外,您应该解析并执行自己计算。 scanf 直接不支持您的插入符号 (^) 表示法。

标签: c scanf


【解决方案1】:

scanf() 的输入是字符串,C 是一种通用的低级编程语言,不会将“e”解释为欧拉数 - 2.7182818... 或任何其他常见的数学常数。

此外,scanf() 不是表达式评估器,因此不会评估诸如 e^2 之类的表达式或诸如 exp() 之类的调用。

要完成您期望的操作,您需要编写一个能够识别特定常量和运算符的表达式求值器。这不是一项微不足道的任务。可以在http://www.arstdesign.com/articles/expression_evaluation.html 找到您可能会适应的示例以及对该过程的出色解释。有关表达式评估器实施的其他建议,请参阅c expression Evaluator

【讨论】:

    【解决方案2】:

    我也是编程新手。 但是,我可能会提出以下建议:

    int main() {
        float n;
        scanf("%f",&n);
        n = pow(2.718281,n);
        printf("%f\n",n);
    }
    

    编辑:我们不能在 C 中使用 ^ 作为幂运算符,而是使用 pow() 函数。

    如果我错了,请提出修改和更正。

    【讨论】:

    • 我不会对此投反对票,但 C 中的 ^ 运算符是 XOR 操作不是用于计算功率 - 使用 pow 函数而不是 math.h 标头并使用 -lm 选项如果您在 gcc 上编码,请编译。
    • 当然,感谢@Observer 的更正。我们从错误中吸取教训。
    • @AjayYadav -- 我们确实从我们的错误中吸取了教训,但是当您发布答案时,您是在向有问题的人建议,以及向未来的搜索者建议您知道自己在说什么的问题。我至少可以建议您尝试编译和运行您在答案中提供的代码。这会在公开发布错误之前提醒您一些问题(它不会让您免于所有此类错误),您也会从这个过程中学习。否则,欢迎来到 SO。
    • @DavidBowling 先生,我很荣幸。谢谢你。我一定会在我发布代码时编译我的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 2021-08-17
    • 2017-01-10
    • 2018-09-01
    • 1970-01-01
    相关资源
    最近更新 更多