您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > C/C++/C#

C语言的调试利器 - printf 大法,无坚不摧,攻无不破

时间:2021-06-23 12:21:18  来源:  作者:峰哥linux编程学堂

程序输入与输出

当我们操作一个linux终端的时候,执行linux命令程序,可以看到命令的输出信息,或者要求输入数据。那么,这些操作就是linux命令程序与用户进行交互。程序与用户的交互过程,可以认为是程序的输入与输出过程。这里我们先介绍程序在终端的输入与输出;当介绍到文件操作的时候,程序可以与硬盘进行输入输出的操作。

printf函数

在编程的过程中,我们需要输出一些有用的调试日志信息,便于跟踪调试程序。例如,我们想知道在程序运行的过程中,某一个变量的值,某一个内存地址的值,或者提示用户,当前程序正在进行什么工作。那么,这一切都离不开printf()函数。

C语言的库函数中,提供了printf()函数,能够输出多种数据格式,非常有用于调试输出信息。更高级的使用,可以配合sprintf()或snprintf()函数,可以把数据格式化输出到内存块中,方便快速组合出有用的字符串格式。

首先,我们来看看printf()函数,如下是一个简单的测试例子:

C语言的调试利器 - printf 大法,无坚不摧,攻无不破

 

程序运行的结果如下:

C语言的调试利器 - printf 大法,无坚不摧,攻无不破

 

可以看到,在printf()函数中,把age变量的值给打印出来,让我们可以看到程序里,某一个变量的内容。此时,我们知道了printf()函数的作用,那么,下面来看看printf()函数的定义格式和各种使用方式。

2.1 printf函数定义和基本使用

C语言提供的printf()函数定义如下:

int printf(const char* format_str, [argument list]);

函数分析:

(1) 参数 format_str 是控制格式输出字符串;

(2) 参数 argument list 是参数列表,该参数是可选参数,不是必须要设置的,可以为空;

(3) 函数的返回值是int类型,是实际打印输出的字符个数;

如下是一个程序测试例子:

C语言的调试利器 - printf 大法,无坚不摧,攻无不破

 

程序运行的结果如下:

C语言的调试利器 - printf 大法,无坚不摧,攻无不破

 

就是只输出一串字符串。在这个例子中,printf()函数的参数只携带了控制格式输出字符串,不携带参数列表。所以,它的作用就只是输出一串字符串。

2.2 printf函数输出格式

1 输出字符和字符串

格式转换符有:

(1) %c --- 输出一个字符;

(2) %s --- 输出一个字符串;

如下是程序测试例子:

C语言的调试利器 - printf 大法,无坚不摧,攻无不破

 

程序运行的结果如下:

C语言的调试利器 - printf 大法,无坚不摧,攻无不破

 

通过测试例子,可以知道:

(1) %c 格式,把变量a存储的数据当作一个字符输出;

(2) %s 格式,把变量pstr指向的字符串输出;

2 输出有符号和无符号整数

格式转换符有:

(1) %d --- 输出有符号数的十进制格式;

(2) %u --- 输出无符号数的十进制格式;

如下是程序测试例子:

C语言的调试利器 - printf 大法,无坚不摧,攻无不破

 

程序运行的结果如下:

C语言的调试利器 - printf 大法,无坚不摧,攻无不破

 

通过测试例子,可以知道:

(1) %d 格式,输出有符号数的十进制格式,例如上面的例子中,把255这个数值存放到a变量,由于a是char类型,只有1个字节的容量。255表示的二进制是1111 1111,最高位是符号位,符号位为1表示负数。最终,表示的负数是:数值位取反,得到000 0000,然后,再加1,就得到 000 0001,所以,就是-1这个数值。

(2) %u 格式,输出无符号数的十进制格式,在上面的例子中,unsigned 指定变量是无符号类型,所以,unsigned char 这个类型表示的1个字节中,没有符号位,一个字节中的8位都是数值位,所以,存放的二进制是 1111 1111表示的数值就是255。

3 输出十六进制和八进制

格式转换符有:

(1) %x --- 输出数值是十六进制格式,是小写字符;

(2) %X --- 输出数值是十六进制格式,是大写字符;

(3) %o --- 输出数值是八进制格式;

如下是程序测试例子:

C语言的调试利器 - printf 大法,无坚不摧,攻无不破

 

程序运行的结果如下:

C语言的调试利器 - printf 大法,无坚不摧,攻无不破

 

通过测试例子,可以知道:

(1) %x格式,把变量x存放的数据值,以十六进制格式输出,如果输出十六进制有字母,则以小写格式表示。

(2) %X格式,就是大写的X字母,以十六进制格式输出变量x的值,如果输出的十六进制有字母,则以大写格式表示。

(3) %o格式,是以八进制格式输出数值。

4 浮点数

格式转换符有:

(1) %f --- 以浮点数的格式输出数值,就是带小数点的数据;

(2) %e --- 以科学计数法e的方式输出浮点数;

如下是程序测试例子:

C语言的调试利器 - printf 大法,无坚不摧,攻无不破

 

程序运行的结果如下:

C语言的调试利器 - printf 大法,无坚不摧,攻无不破

 

通过测试例子,可以知道:

(1) %f格式,输出带有小数点的浮点数;

(2) %e格式,以科学计数法e的方式输出浮点数的值,例如上面的例子中,输出:

x1 = 1.250000e+01

根据科学计数法e的表示格式,e字母后面带数值N表示10的N次方。那么,1.250000e+01这个数值中,e字母后面带有数值1,表示10的1次方。所以有:

1.250000e+01 = 1.250000 * 10^1 = 1.250000 * 10 = 12.5

所以对于x这个数值,使用%f, %e格式表示,都是相同的值。

5 转移字符

转移字符格式有:

(1) n --- 换行;

(2) t --- 水平跳格,如同按下TAB按键;

(3) r --- 回到当前行的开始位置;

(4) ’ --- 输出单引号;

(5) ” --- 输出双引号;

(6) \ --- 输出一条反斜杠;

如下是程序测试例子:

C语言的调试利器 - printf 大法,无坚不摧,攻无不破

 

程序运行的结果如下:

C语言的调试利器 - printf 大法,无坚不摧,攻无不破

 

其中,注意:

printf("abcwwwr123n");

开始在新的一行输出 abcwww,然后,遇到 r 的时候,回到行的开始位置,就回到字符a这个位置,然后,再输出123,此时,新输出的123字符就把abc字符给覆盖。最终,输出123www这样的字符。



Tags:C语言   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1.字符串数组+初始化char s1[]="array"; //字符数组char s2[6]="array"; //数组长度=字符串长度+1,因为字符串末尾会自动添‘\0‘printf("%s,%c\n",s1,s2[2]);...【详细内容】
2021-12-08  Tags: C语言  点击:(46)  评论:(0)  加入收藏
一、问题提出问题:把m个苹果放入n个盘子中,允许有的盘子为空,共有多少种方法?注:5,1,1和1 5 1属同一种方法m,n均小于10二、算法分析设f(m,n) 为m个苹果,n个盘子的放法数目,则先对...【详细内容】
2021-11-17  Tags: C语言  点击:(46)  评论:(0)  加入收藏
前言很多事不深入以为自己懂了,但真正用到项目上,才发现了问题。曾以为自己写C语言已经轻车熟路了,特别是对软件文件的工程管理上,因为心里对自己的代码编写风格还是有自信的。(...【详细内容】
2021-08-27  Tags: C语言  点击:(82)  评论:(0)  加入收藏
C语言作为高级语言,用其编写的程序指令机器并不能识别,因此需要有一个编译器将其转换为机器可识别的二进制指令。C语言已经出现50多年的时间,其相关的编译器种类众多,从最早先的...【详细内容】
2021-08-24  Tags: C语言  点击:(130)  评论:(0)  加入收藏
一 什么是ANSI控制码(ANSI escape sequences)维基百科给出的解释如下:ANSI escape sequences are a standard for in-band signaling to control cursor location, color, font...【详细内容】
2021-08-02  Tags: C语言  点击:(167)  评论:(0)  加入收藏
字符分类: 宽字符函数普通C函数描述 iswalnum() isalnum() 测试字符是否为数字或字母 iswalpha() isalpha() 测试字符是否是字母 iswcntrl() iscntrl() 测试字符是否是控制符...【详细内容】
2021-07-19  Tags: C语言  点击:(131)  评论:(0)  加入收藏
取消宏定义定义变量的时候,不能够重复定义同名变量;同理,定义宏的时候,不可以重复定义同名的宏。例如:#define MAX 1000#define MAX 50此时,重复定义MAX宏,是不合法的代码。但是,我...【详细内容】
2021-07-13  Tags: C语言  点击:(122)  评论:(0)  加入收藏
函数参数传递指针变量在函数的定义中,函数的参数可以是各种变量,就包括指针变量。首先,我们来看看一个函数的定义:void func(char* p);该函数的名称叫做func,参数定义为 char* p...【详细内容】
2021-07-09  Tags: C语言  点击:(135)  评论:(0)  加入收藏
8 函数嵌套调用我们学习了函数的定义和使用,那么,函数在被调用之前,必须先进行定义或者声明。如下是一个程序测试例子: 程序运行结果如下: 可以看到,在main函数中调用了func函数。...【详细内容】
2021-07-03  Tags: C语言  点击:(342)  评论:(0)  加入收藏
程序输入与输出当我们操作一个linux终端的时候,执行linux命令程序,可以看到命令的输出信息,或者要求输入数据。那么,这些操作就是linux命令程序与用户进行交互。程序与用户的交...【详细内容】
2021-06-23  Tags: C语言  点击:(163)  评论:(0)  加入收藏
▌简易百科推荐
一、简介很多时候我们都需要用到一些验证的方法,有时候需要用正则表达式校验数据时,往往需要到网上找很久,结果找到的还不是很符合自己想要的。所以我把自己整理的校验帮助类分...【详细内容】
2021-12-27  中年农码工    Tags:C#   点击:(0)  评论:(0)  加入收藏
引言在学习C语言或者其他编程语言的时候,我们编写的一个程序代码,基本都是在屏幕上打印出 hello world ,开始步入编程世(深)界(坑)的。C 语言版本的 hello world 代码:#include <std...【详细内容】
2021-12-21  一起学嵌入式    Tags:C 语言   点击:(10)  评论:(0)  加入收藏
读取SQLite数据库,就是读取一个路径\\192.168.100.**\position\db.sqlite下的文件<startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/...【详细内容】
2021-12-16  今朝我的奋斗    Tags:c#   点击:(21)  评论:(0)  加入收藏
什么是shellshell是c语言编写的程序,它在用户和操作系统之间架起了一座桥梁,用户可以通过这个桥梁访问操作系统内核服务。 它既是一种命令语言,同时也是一种程序设计语言,你可以...【详细内容】
2021-12-16  梦回故里归来    Tags:shell脚本   点击:(16)  评论:(0)  加入收藏
一、编程语言1.根据熟悉的语言,谈谈两种语言的区别?主要浅谈下C/C++和PHP语言的区别:1)PHP弱类型语言,一种脚本语言,对数据的类型不要求过多,较多的应用于Web应用开发,现在好多互...【详细内容】
2021-12-15  linux上的码农    Tags:c/c++   点击:(17)  评论:(0)  加入收藏
1.字符串数组+初始化char s1[]="array"; //字符数组char s2[6]="array"; //数组长度=字符串长度+1,因为字符串末尾会自动添&lsquo;\0&lsquo;printf("%s,%c\n",s1,s2[2]);...【详细内容】
2021-12-08  灯-灯灯    Tags:C语言   点击:(46)  评论:(0)  加入收藏
函数调用约定(Calling Convention),是一个重要的基础概念,用来规定调用者和被调用者是如何传递参数的,既调用者如何将参数按照什么样的规范传递给被调用者。在参数传递中,有两个很...【详细内容】
2021-11-30  小智雅汇    Tags:函数   点击:(19)  评论:(0)  加入收藏
一、问题提出问题:把m个苹果放入n个盘子中,允许有的盘子为空,共有多少种方法?注:5,1,1和1 5 1属同一种方法m,n均小于10二、算法分析设f(m,n) 为m个苹果,n个盘子的放法数目,则先对...【详细内容】
2021-11-17  C语言编程    Tags:C语言   点击:(46)  评论:(0)  加入收藏
一、为什么需要使用内存池在C/C++中我们通常使用malloc,free或new,delete来动态分配内存。一方面,因为这些函数涉及到了系统调用,所以频繁的调用必然会导致程序性能的损耗;另一...【详细内容】
2021-11-17  深度Linux    Tags:C++   点击:(37)  评论:(0)  加入收藏
OpenCV(Open Source Computer Vision Library)是一个(开源免费)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android、ios等操作系统上,它轻量级而且高效---由一系列...【详细内容】
2021-11-11  zls315    Tags:C#   点击:(50)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条