我最近看到了一个超越我的答案,
那个人写了这段代码,它的值为1。
cr
是一个整数。
cr = scanf("%d %.2f",&x,&y)
那你怎么能这样做?为什么它会给出1?
答案 0 :(得分:0)
首先,由于scanf
声明存在问题,您显然会得到1。你需要从@weathervane声明中删除.2
。
cr = scanf("%d %.2f",&x,&y)
到此:
cr = scanf("%d %f",&x,&y)
当您打印cr
时,您将获得值2而不是1.您在scanf
语句中添加另一个要扫描的var并打印它,您将看到值为3. / p>
#include <stdio.h>
main(){
int x, cr, z;
float y;
cr = scanf("%d %f %d",&x,&y, &z);
printf("%d\n", cr);
}
<强>输出:强>
56
5
2
3
如您所见,cr
正在存储正在使用的var的数量。
答案 1 :(得分:0)
scanf的原型是
int scanf(const char *format, ...)
该函数返回一个整数,告诉您成功读取了多少个参数。所以,你在这里:
int cr = scanf("%d %.2f", &x, &y);
你有2个参数(x和y)所以如果两个参数都被成功读取,那么cr就是2。但是你得到cr = 1.这意味着其中一个参数没有被成功读取。
正如@narusin指出的那样,这是因为格式说明符%。2f 是错误的。如果你使用gcc进行编译,它会告诉你一个警告(第3行):
tmp $ gcc scanf_t.c -o scanf_t
scanf_t.c: In function ‘main’:
scanf_t.c:9:2: warning: unknown conversion type character ‘.’ in format [-Wformat=]
n = scanf("%d %.2f", &x, &y);
^
scanf_t.c:9:2: warning: too many arguments for format [-Wformat-extra-args]
要读取浮点数,格式说明符应为%f 。