我有简单的问题;)当我输入数字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");
提前致谢!
答案 0 :(得分:4)
当您为1/5
键入scanf
时,scanf
扫描1
会看到/
,因为它不是%f
的有效字符1}},停止扫描,将其余数据留在stdin
。
同样,当您为1.0/5.0
键入scanf
时,scanf
次扫描1.0
会看到/
,因为它不是%f
的有效字符{1}},停止扫描,将其余数据留在stdin
。
请注意,scanf
不是eval
(eval
是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"中描述了一个简单但聪明且灵活的例子。