将scanf语句分配给变量意味着什么?

时间:2017-05-08 22:10:37

标签: c scanf

我最近看到了一个超越我的答案, 那个人写了这段代码,它的值为1。 cr是一个整数。

cr = scanf("%d %.2f",&x,&y)

那你怎么能这样做?为什么它会给出1?

2 个答案:

答案 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