C语言学习:printf() 函数用法详解

在C语言中,有三个函数可以用来在显示器上输出数据,它们分别是:

  • puts():只能输出字符串,并且输出结束后会自动换行。
  • putchar():只能输出单个字符。
  • printf():可以输出各种类型的数据。

putchar输出一个字符,即char类型;puts输出一个字符串

printf是格式化输出可以自己定义输出的格式;printf("%d\n",a),其中" "之间的是格式说明串。% 后的一个或两个字符是格式说明符,用它来控制输出变量值的形式,
printf可以输入以上两种格式:

  • 字符说明符%c 同于putchar;
  • 字符串说明符%s 同于puts;

其中 printf() 是最灵活,最复杂,最常用的输出函数,其余两个函数都可以被 printf() 所替代!
首先,如果在程序中要使用 printf() 那么就必须要包含头文件 stdio.h

printf 的格式:

printf() 函数的原型如下:

#include 
int printf(const char *format, ... )

printf() 的输出格式有四种:

1)printf(“字符串\n”);

#include 

int main(){
	printf("hello word!\n");
	return 0;
}

其中 \n 表示换行的意思,它是一个转义字符。它的意义:换行(LF),将当前位置移到下一行开头。
printf() 中的双引号和后面的分毫必须是在英文输入法下的,双引号内的字符串并没有要求,可以是英文也可以是中文。
2)printf(“输出控制符”, 输出参数);

#include 

int main(){
	int i = 10;
	
	printf("%d\n", i);
	//%d是输出控制符,d 表示是十进制,后面的 i 是输出参数
	return 0;
}

这句话的意思是将变量 i 以十进制输出。

那么现在有一个问题:i 本身就是十进制,为什么还要将 i 以十进制输出呢?

因为程序中虽然写的是 i=10,但是在内存中并不是将 10 这个十进制数存放进去,而是将 10 的二进制代码存放进去了。计算机只能执行二进制 0、1 代码,而 0、1 代码本身并没有什么实际的含义,它可以表示任何类型的数据。所以输出的时候要强调是以哪种进制形式输出。所以就必须要有“输出控制符”,以告诉操作系统应该怎样解读二进制数据。

如果是%x就是以十六进制的形式输出,要是%o就是以八进制的形式输出,大家可以自己试一下。

3) printf(“输出控制符1 输出控制符2…”, 输出参数1,输出参数2, …);

#include 

int main(){
	int i = 10;
	int j = 20;
	
	printf("%d %d", i, j);
	return 0;
}

输出控制符 1 对应的是输出参数 1,输出控制符 2 对应的是输出参数 2……编译、链接、执行后我们看一下输出结果:
C语言学习:printf() 函数用法详解_第1张图片

为什么 10 和 3 之间有一个空格?因为上面 %d 和 %d之间有空格,printf() 中双引号内除了输出控制符外,所有其余的普通字符全部都原样输出。举例如下:

#include 

int main(){

	int i = 10;
	int j = 20;

	printf("i = %d j = %d", i, j);
	return 0;
}

在这里插入图片描述

i =空格j= 全都原样输出了。此外需要注意的是:“输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”需一一对应。

4) printf(“输出控制符 非输出控制符”,输出参数);
这个实际上就是上面举的那个例子。这时候会有一个问题:到底什么是“输出控制符”,什么是“非输出控制符”?很简单,凡是以 % 开头的基本上都是输出控制符。

输出控制符:

常用的输出控制符主要有以下几个:

控制符 说明
%d 按十进制整型数据的实际长度输出
%ld 输出长整型数据
%md m 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补以空格,若大于 m,则按实际位数输出
%i 有符号十进制整数(与%d相同)
%u 输出无符号整型(unsigned)。无符号十进制整数
%c 用来输出一个字符
%f 用来输出实数,包括单精度和双精度,以小数形式输出。不指定字段宽度,由系统自动指定,整数部分全部输出,小数部分输出 6 位,超过 6 位的四舍五入
%.mf 输出实数时小数点后保留 m 位,注意 m 前面有个点
%e(%E) 以浮点数指数输出[e-(E-)记数法]
%g(%G) 浮点数不显无意义的零"0"
%o 以八进制整数形式输出
%s 用来输出字符串。用 %s 输出字符串同前面直接输出字符串是一样的。但是此时要先定义字符数组或字符指针存储或指向字符串
%x(或 %X 或 %#x 或 %#X 以十六进制形式输出无符号整数
%p 用来输出地址

下面是对组成格式说明的各项符号加以说明:

  • %:表示格式说明的起始符号,不可缺少。
  • -:表示左对齐输出,如省略表示右对齐输出。
  • 0:有0表示指定空位填0,如省略表示指定空位不填。
  • m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。
  • l: 对整型指long型,对实型指double型。
  • h: 用于将整型的格式字符修正为short型。

%x、%X、%#x、%#X 的区别:

因为调试的时候经常要将内存中的二进制代码全部输出,然后用十六进制显示出来。下面写一个程序看看它们四个有什么区别:

# include 

int main(){
    int i = 30;
    
    printf("%x\n", i);   
    printf("%X\n", i);   
    printf("%#x\n", i);   
    printf("%#X\n", i);   
    return 0;
}

以下是代码生成结果(VS-2013):

C语言学习:printf() 函数用法详解_第2张图片

从输出结果可以看出:如果是小写的x,输出的字母就是小写的;如果是大写的X,输出的字母就是大写的;如果加一个#,就是以标准的十六进制形式输出。

但在我们使用过程中,最好是加一个 # ,否则如果输出的十六进制数正好没有字母的话会误认为是一个十进制数呢!总之,不加 # 容易造成误解。但是如果输出 0x1e0x1E,那么人家一看就知道是十六进制。而且%#x和%#X中,笔者觉得大写的比较好,因为大写是绝对标准的十六进制写法。,那么人家一看就知道是十六进制。

如何输出 %d、\ 和双引号:

printf 中有输出控制符%d,转义字符前面有反斜杠\,还有双引号。那么各位有没有想过这样一个问题:怎样将这三个符号通过 printf 输出到屏幕上呢?

要输出%d只需在前面再加上一个%,要输出\只需在前面再加上一个\,要输出双引号也只需在前面加上一个\即可。程序如下:

# include 

int main(){
    printf("%%d\n");
    printf("\\\n");
    printf("\"\"\n");
    return 0;
}

代码生成结果如下:
C语言学习:printf() 函数用法详解_第3张图片

总结:

printf 是C语言中非常重要的一个函数。经过上面的学习我们发现,其实它并不难。只要多编程多练习,很快就能掌握。

输出控制符中,%d、%f、%s、%c 是最常用的,它们分别是输出整数、实数、字符串和字符的控制符。%.mf 虽然用得不多,但一定要重视。

笔者也是C语言入门不久,未能达到大成。如若那块有问题,欢迎留言纠正,谢谢!

你可能感兴趣的:(C语言)