scanf & printf 补充

scanf

忽略所有的可用连续空白符

如同通过于循环中调用 isspace 确定

格式字符串中 \n 、 ” “ 、 \t\t 或其他空白无区别。

// 以下两条语句等价
// 对于输入 inA = "1 2", inB = "1\n2" 均可正常输入
scanf("%d\n%d", &a, &b);
scanf("%d %d", &a, &b);

匹配一个来自字符集set 的字符的非空字符序列

不是正则, 不是正则,不是正则

char s[20];
//读入整行
scanf("%[^\n]", s);
//防止越界
scanf("%20[^\n]", s);
//对于输入"asdfc", 读入"a"
scanf("%[a-c]", s);

%i 输入不同进制数

该数的格式同 strtol() 以值 0 为 base 时所期望者(基底以首个分析的字符确定)

int a;
scanf("%i", &a);
printf("%i", a);

input: 0x321f
output: 12831

input:0121
output: 81

input: 0b101 (don't work!!!)
output: 0 (or something whatever)

忽略某个输入元素

赋值抑制字符 * 。若存在此选项,则此函数不将结果赋值给任何接收用参数。放在%后面。

 

int a, b;
scanf("%d %*d %d", &a, &b);
printf("%d %d\n", a, b);

input: 1 2 3
output: 1 3

printf

指定浮点数精度

double u = 123.456789;
printf("%lf\n", u);
printf("%.2lf\n", u);
printf("%.10lf\n", u);


output:
---
123.456789
123.46
123.4567890000

指定字符串长度

const char a[] = "0123456789";
printf("[%6s]\n", a + 7);
printf("[%-6s]\n", a + 7);
printf("[%.5s]\n", a + 2);

output:
---
[   789]
[789   ]
[23456]

指定进制

int a = 63;
printf("%d %o %x %X\n", a, a, a, a);
printf("%#o %#x %#X\n", a, a, a);


output:
---
63 77 3f 3F
077 0x3f 0X3F

指定场宽

int a = 63;
printf("|%5d|%-5d|\n", a, a);

output:
---
|   63|63   |

 

CC BY-NC-SA 4.0 本作品使用基于以下许可授权:Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注