1.输出类型格式
C语言中常见的输出格式有以下几种。
输出形式 | 含义 |
---|---|
%d | 表示按照十进制整型输出 |
%c | 表示按字符类型输出 |
%s | 表示按字符串类型输出 |
%f | 表示按float浮点数类型输出 |
%lf | 表示按double浮点数类型输出 |
通过以下一段代码我们能更清晰直观的看到每个输出类型。
#include <stdio.h>
int main()
{
printf("%d\n", 20);
printf("%c\n", 'a');
printf("%s\n", "abcd");
printf("%f\n", 3.14);
printf("%.12%lf\n", 3.141592678923);
return 0;
}
代码运行结果如下。
这里float和double类型一般默认输出到小数点后六位,当在%后加上.12时,编译器就会输出小数点后12位,其中double类型的范围比float大,两者的区别如下。
类型 | float | double |
---|---|---|
取值范围 | -3.4E ^ 38 ~ 3.4E ^ 38 | -1.79E ^ 308 ~ 1.79E ^ 308 |
占用字节 | 4个(32位) | 8个(64位) |
如果想要更改输出整型的数或者对齐,可在%后加上对应的参数。
2.转义字符
C语言中常见的转义字符如下。
转义字符 | 含义 |
---|---|
\? | 书写连续多个问号时使用,防止它们被解析为三字母词 |
\’ | 用来表示字符常量‘ |
\" | 用于表示一个字符串内部的双引号 |
\\ | 用来表示一个反斜杠,防止它被解析为一个转义序列符 |
\n | 换行 |
\a | 警告字符 |
\b | 退格符 |
\f | 换页符 |
\r | 回车符 |
\t | 水平制表符 |
\v | 垂直分隔符 |
\ddd | ddd表示1-3个八进制的数字 |
\xdd | dd表示2个十六进制的数字 |
接下来我将详细介绍每个转义字符。
- \? 书写连续多个问号时使用,防止它们被解析为三字母词
接下来我将用一段代码来帮助我们加深理解。
#include <stdio.h>
int main()
{
printf("%s\n","(are you ok ??)");
//在支持三字符词的编译器上会打印(are you ok ??]
//为了避免这种情况,通常在?前面加上反斜杠'\'
printf("%s\n","(are you ok \?\?)");
return 0;
}
- \’ 用来表示字符常量
#include <stdio.h>
int main()
{
//打印字符'a'
printf("%c\n", 'a');
//打印字符 '
printf("%c\n", ''');//编译器会报错
//因此需加反斜杠'\',防止其无法被解析
printf("%c\n", '\'');
return 0;
}
- \" 用于表示一个字符串内部的双引号
假如我们要打印一个“Hello World!!!”
- \\ 用来表示一个反斜杠,防止它被解析为一个转义序列符
- \n 换行
假如我们要打印字符串“abcdef”
#include <stdio.h>
int main()
{
//加\n(换行)的区别
printf("abcdef");
printf("------------\n");
printf("abcdef\n");
printf("------------\n");
//加双斜杠(防止过定义)的区别
printf("abcd\0ef\n");
printf("\n............\n");
printf("abcd\\0ef\n");
return 0;
}
代码运行结果如下。
从以上结果我们可以看出加\n(换行)的区别;而对于下面的字符串,由于字符串是以‘\0’结尾的,当编译器读到‘\0’后会自动跳出,但当我们加上双斜杠‘\\0’后,其不会被解析为‘\0’,编译器也不会跳出,从而输出’abcd\0ef’.
- \a 警告字符,会使得终端发出警报声或者出现闪烁.
- \b 退格符,光标回退一个字符,但不删除字符.
下面我将通过运行一段代码来进行验证.
从代码的运行结果可以看出,加入退格符‘\b’之后,字母‘d’未输出,但它仍在内存里.
- \f 换页符,光标移动到下一页,如今的编译器已无法验证.
- \r 回车符,光标移动到同一行的开头.
- \t 水平制表符,光标移动到下一个水平制表位,通常是4/8的倍数.
- \v 垂直分隔符,光标移动到下一个垂直制表位,通常是下一行的同一列.
下面主要介绍‘\t’水平制表符.
#include <stdio.h>
int main()
{
printf("aa\tbbbb\tcccccc\t\n");
return 0;
}
代码运行后的结果如下.
- \ddd ddd表示1—3个八进制的数字.
- \xdd dd表示2个十六进制数字.
接下来我将通过一段代码来验证.
#include <stdio.h>
int main()
{
printf("%c\n",'\130');
printf("%c\n", '\x30');
return 0;
}
代码运行结果如下.
为什么会出现字符‘X’和数字‘0’呢?其中八进制数130转换为十进制数88,在ASCII码表里刚好对应的字符就是‘X’;同理十六进制数30转换为十进制数48,对应ASCII码表的数字‘0’.