printf()
printf() 函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。
printf() 函数的调用格式为: printf("<格式化字符串>", <参量表>);
其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以 "%" 开始,后跟一个或几个规定字符,用来确定输出内容格式。
参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用 "," 分开,且顺序一一对应,否则将会出现意想不到的错误。
格式化规定符
| 格式化规定符 | 作用 |
|---|---|
| %d | 十进制有符号整数 |
| %u | 十进制无符号整数 |
| %f | 浮点数 |
| %s | 字符串 |
| %c | 单个字符 |
| %p | 指针的值 |
| %e | 指数形式的浮点数 |
| %x | % X 无符号以十六进制表示的整数 |
| %0 | 无符号以八进制表示的整数 |
| %g | 自动选择合适的表示法 |
说明:
-
可以在 "%" 和字母之间插进数字表示最大场宽。 例如: %3d 表示输出 3 位整型数,不够 3 位右对齐。 %9.2f 表示输出场宽为 9 的浮点数,其中小数位为 2, 整数位为 6, 小数点占一位,不够 9 位右对齐。 %8s 表示输出 8 个字符的字符串,不够 8 个字符右对齐。 如果字符串的长度、或整型数位数超过说明的场宽,将按其实际长度输出。 但对浮点数,若整数部分位数超过了说明的整数位宽度,将按实际整数位输出; 若小数部分位数超过了说明的小数位宽度,则按说明的宽度以四舍五入输出。 另外,若想在输出值前加一些 0, 就应在场宽项前加个 0。 例如: %04d 表示在输出一个小于 4 位的数值时,将在前面补 0 使其总宽度 为 4 位。 如果用浮点数表示字符或整型量的输出格式,小数点后的数字代表最大宽度, 小数点前的数字代表最小宽度。 例如: %6.9s 表示显示一个长度不小于 6 且不大于 9 的字符串。若大于 9, 则 第 9 个字符以后的内容将被删除。
-
可以在 "%" 和字母之间加小写字母 l, 表示输出的是长型数。 例如: % ld 表示输出 long 整数 % lf 表示输出 double 浮点数
-
可以控制输出左对齐或右对齐,即在 "%" 和字母之间加入一个 "-" 号可 说明输出为左对齐,否则为右对齐。 例如: %-7d 表示输出 7 位整数左对齐 %-10s 表示输出 10 个字符左对齐
特殊规定字符
| 特殊规定字符 | 作用 |
|---|---|
\n |
换行 |
\f |
清屏并换页 |
\r |
回车 |
\t |
Tab 符 |
\xhh |
表示一个 ASCII 码用 16 进表示,其中 hh 是 1 到 2 个 16 进制数 |
mian 函数获取参数
ANSI-C(C89/C99)的话main() 函数有 2 种主要形式:
int main(void)int main(int argc, char *argv[]),也可写成int main(int argc, char **argv)
argv[argc]放空指针(NULL 指针),argc和argv可以用别名。
- 另外,还有一种受系统限制的形式:
int main(int argc, char _argv[], char _envp[])
前两个参数同 2,第三个参数_envp[]放环境变量(这个形式很少用)。
ANSI-C 推荐的带参数的 main 函数只有上面 (2) 这一种。
C 和 C++ 中 main 函数常见的几种形式:
main()int main()int main(void)int main(int, char**)int main(int, char*[])int main(int argc, char **argv)int main(int argc, char _argv[])int main(int argc, char *argv[], char_envp[])void main(void)
- (1) 是 (3) 的简写。不推荐使用。
- (2) 是 (3) 的简写。在 C++ 中是正确的形式。
- (3) 在 C 和 C++ 中都是正确的形式。推荐使用。(还有缺省 int 的
main(void)形式)。 - (4) 和 (5) 是不用参数时的一种写法。编译器级别高时会警告。不推荐使用。
- (6) 是 (7) 的另外写法。两种都可以,凭个人爱好。
- (7) 是带参数的正确的形式。推荐使用。
- (8) 是一种很少用的写法,且受系统限制。
- (9) 一般不认为是正确的写法,但是在嵌入式系统中有使用(包括
void main()形式)。
编译错误 syntax error : missing ';' before 'type'
将变量声明放在函数一开始,eg:
#include <stdio.h>
int main(int argc, char** argv)
{
//这样会编译错误
for (int i = 0; i < argc; ++i)
{
printf("argv[%d] = %s\n", i, argv[i]);
}
//这样才不会编译错误
/**
int i;
for (i = 0; i < argc; ++i)
{
printf("argv[%d] = %s\n", i, argv[i]);
}
*/
getchar();
return 0;
}