scanf中的%2d是什么意思?

8

我知道这个声明的意思

scanf("%d",&x);

但这个语句是做什么的呢?

scanf("%2d",&x);

我尝试搜索了一下,但没有找到答案。我也想知道发生了什么。


5
你应该搜索scanf()函数的手册页面。这并不难找到。阅读它,多次阅读。 - unwind
scanf() 中的 %nd 读取至少 n 位数长度的十进制整数。 - Sunil Bojanapally
@SunilBojanapally:不是“至少”,而是“最多”。如果遇到非数字字符(字母、空格、标点符号、EOF等),它将在少于_n_个字符后停止。 - Jonathan Leffler
2个回答

13

这是一个两位数:

int n = 0;
scanf ("%2d", &n);
printf ("-> %d\n", n);

12 -> 12

88657 -> 88


能否像这样做 - scanf("%2d.%d",&x)? - Ashwin
@Ashwin 是的,但你需要另一个变量:scanf("%2d.%d", &x, &y); 因为你要进行两次转换。记得检查返回值。 - unwind
1
请注意,23.00056723.567都会在第二个变量中给出567;但是,这两个字符串的含义是非常不同的。 - Jonathan Leffler

3
在“%”符号后和要读取数据类型的前面,跟随着一个数字,表示该特定类型数据的最大大小。
当您正在读取整数(%2d)时,它将仅允许两位数的整数。如果要读取长度为50个字符的数组,则应使用%49s(留下一个用于空终止字节)。这是相同的思路。
int number = 0;
scanf("%2d", &number);
printf("%d", number);

如果用户在scanf()函数中传递了21,那么数字21将被存储在变量number中。如果用户传递的数字超过21位,例如987,只有前两个数字会被存储下来 - 98。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接