格式化输入函数 scanf 的功能非常强大
scanf函数的一般形式为:
scanf(“格式控制字符串”, 地址表列); |
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> int main() { int n; scanf("%d", &n); printf("decimal: %d\n", n); /* 十进制 */ printf("octal: %o\n", n); /* 八进制 */ printf("hexadecimal: %x\n", n); /* 十六进制 */ printf("char: %c\n", n); /* 字符 */ return 0; } |
输入49,输出结果如下:
decimal: 49 octal: 61 hexadecimal: 31 char: 1 |
保存在计算机中的数据显示的形式可以有多种。
如果认为输入的是16进制的数字,程序可以写成
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> int main() { int n; scanf("%x", &n); printf("decimal: %d\n", n); printf("octal: %o\n", n); printf("hexadecimal: %x\n", n); printf("char: %c\n", n); return 0; } |
输入41,输出结果如下:
decimal: 65 octal: 101 hexadecimal: 41 char: A |
16进制的41转换成十进制,就是 4*16+1 = 65
输入数据的类型,其格式符和意义如下表所示:
格式 | 字符意义 |
---|---|
d | 输入十进制整数 |
o | 输入八进制整数 |
x | 输入十六进制整数 |
u | 输入无符号十进制整数 |
f或e | 输入实型数(用小数形式或指数形式) |
c | 输入单个字符 |
s | 输入字符串 |
1 2 3 4 5 6 7 8 9 10 | #include <stdio.h> int main() { int year, month, day; scanf("%d-%d-%d", &year, &month, & day); printf("%d-%02d-%02d\n", year, month, day); return 0; } |
输入:
2014-9-9
输出结果如下:
2014-09-09
1 2 3 4 5 6 7 8 9 10 | #include <stdio.h> int main() { int year, month, day; scanf("date:%d-%d-%d", &year, &month, & day); printf("%d-%02d-%02d\n", year, month, day); return 0; } |
输入:
date:2014-9-9
输出结果如下:
2014-09-09
* 表示跳过
1 2 3 4 5 6 7 8 9 10 | #include <stdio.h> int main() { int a, b; scanf("%d%*d%d", &a, &b); printf("a=%d b=%d\n", a, b); return 0; } |
输入:
1 2 3
输出:
a=1 b=3