【发布时间】:2015-06-17 00:29:53
【问题描述】:
我在 C 中有以下代码:
#include <stdio.h>
#include <stdlib.h>
int var();
int var()
{
return 10;
}
void main()
{
int a;
double x;
a=0;
a=var();
printf("hello world, i am a function which returned the value %d",a);
printf("\nnow you enter a value:");
scanf("%d",&a);
printf("so you entered the value: %d",a);
printf("\nnow enter a double value:");
scanf("%lf",&x);
printf("The double number till 4 precision is: %0.4lf",x);
}
当我为两个 scanf 输入普通整数和双精度值时,它运行良好。但是我想让它更健壮。如果我为 int scanf 输入十进制值,则代码会直接跳转到下一个 printf 并跳过 scanf 的 double 值。它将我在 int 中输入的小数部分打印为双精度值。
例如:
你好,我是一个返回值 10 的函数
现在您输入一个值:44.67
所以你输入了值:44
现在输入一个双精度 值:直到 4 精度的双精度数为:0.6700
有什么帮助吗?
【问题讨论】:
-
阅读 scanf 的手册页 - 它返回一个值!
-
@EdHeal ,但在这种情况下这无济于事,因为
scanfs 都将返回 1。不过,检查这很好...... -
输入
44.67时,第一个scanf消耗44。第二个scanf看到.67并使用它,因为它是一个有效的十进制数。这就是为什么第二个scanf被“跳过” -
也许需要更好的 scanf 模式
-
总是检查
scanf的返回值,例如:if (scanf("%d", &a) != 1) /* error */;