Scanf - 引入价值和算术

时间:2015-10-24 12:25:40

标签: c

我有简单的问题;)当我输入数字0.2时,结果是0.2。当我输入操作1/5或1.0 / 5.0时,结果是1.你能解释一下吗?

float a;
printf("Enter the number:");
scanf("%f",&a);
printf("%f",a);
printf("\n");

提前致谢!

2 个答案:

答案 0 :(得分:4)

当您为1/5键入scanf时,scanf扫描1会看到/,因为它不是%f的有效字符1}},停止扫描,将其余数据留在stdin

同样,当您为1.0/5.0键入scanf时,scanf次扫描1.0会看到/,因为它不是%f的有效字符{1}},停止扫描,将其余数据留在stdin

请注意,scanf不是evaleval是python中的函数),只是扫描来自stdin的数据。

答案 1 :(得分:3)

scanf无法解析某个术语并对其进行评估。在您的情况下,它只读取前导1并在a中返回:

要阅读像您这样的术语,您可以使用

double op1, op2, res;
char op;
scanf("%lf %c %lf", &op1, &op, &op2);
switch (op) {
case '/':
    res = op1 / op2;
/* and so on... */
}

对于更复杂的术语,您需要更复杂的解析器。 Bjarne Stroustrup在他的着作" C ++ Programming Language"中描述了一个简单但聪明且灵活的例子。