意外的scanf行为

时间:2015-10-30 14:39:20

标签: c

为什么给定代码的输出会像这样??

int main(){

int a,b,c;

scanf("%3d %3d %3 d",&a,&b,&c);

printf("%d %d %d",a,b,c);
}

我提供的输入是1234 5678。

突然显示输出为123 4 567。

任何人都可以解释为什么这个输出来了吗?

2 个答案:

答案 0 :(得分:3)

首先:如果您完全按照显示的方式编译了代码,请注意最后一个%3d之间有一个空格,因此scanf将不会读取最后一个值,因为没有第三个%3d标志。

第二:您在scanf3之间使用% d,这意味着您将读取的整数宽度限制为3位数,以便输入的数字, 5678应该只读567。

我的建议:将scanf行写为

scanf("%d %d %d", &a, &b, &c);

这样你可以给它带有或多或少数字的整数。

答案 1 :(得分:2)

scanf("%3d %3d %3 d",&a,&b,&c);

输入:1234 5678

输出:123 456 -1217434035

因为你的表达式%3 d搞砸了。

如果您将整个内容更改为:

#include <stdio.h>

int main(){

int a,b,c;

scanf("%3d %3d %3d",&a,&b,&c);

printf("%d %d %d",a,b,c);
}

你得到(可能是预期的)输出:

  

123 4 567

会发生什么:

123被读入a(您指定了3个字符)

4被读入b(默认情况下scanf在空格处停止)

567被读入c(您指定了3个字符)