【C语言】浅谈C语言数组%c%s打印逻辑及数组打印单个汉字

您所在的位置:网站首页 为什么字符数组可以直接输出数据 【C语言】浅谈C语言数组%c%s打印逻辑及数组打印单个汉字

【C语言】浅谈C语言数组%c%s打印逻辑及数组打印单个汉字

2023-07-24 22:49| 来源: 网络整理| 查看: 265

众所周知,数组存储字母的时候,如果是一串字符,我们叫做字符串,使用双引号引用。

那么问题来了,为什么输出差别那么大呢?我们来看一下这三个arr的储存形式。

%c打印的时候会把ascll和字符相互转换就导致了出现乱码的问题,比如arr3中,%c并不知道4950515233320这个数字对应什么就会乱码。

%s打印的时候是直接打印字符一直到出现/0这个结束标志。

 上面abc后面出现乱码就是这个原因,因为一直找不到/0这个结束标志,我们在c后面加一个\0就能解决问题!

以至于一个我们经常出现的问题(如下图)就是这个原因引起

 因为%s要打印所有的字符一直到/0,但是arr[0]是一个限制,限制只能打印第一个字符,就导致了这个异常的出现,我们只需要使用%c打印就行。

 于是兜兜转转就又回到了故事的开始,但是与上面刚开始出现的乱码不同,我们这时的乱码是正常的,因为我们限制%c只打印arr[0]的内容,%c又是根据ascll打印的(据下图),所以我们就会得到这三个正常的乱码。

---------------------------------------------------------------------------------------------------------------------------------

以上就是我们C语言%c与%s打印逻辑的全部内容,明白了这个,其他都是小问题!

---------------------------------------------------------------------------------------------------------------------------------

但是我们C语言该如何使用数组打印单个汉字呢?

如果我们使用%c打印那么就会乱码。因为C语言中,我们的汉字由两个字符组成,%c根据ascll码值只能识别数字来打印。例如上图的arr1,我们如果想要只打印”你“,就需要把arr1[0]和arr1[1]的ascll码值算出来然后合并,很明显我们的%c做不到。

我们使用%s可以打印出来汉字,但是局限性太大,(如下图)我们本质上是让%s打印所有的字符,然后在我们在汉字后面手动加入”\0“来让它检测到停止符号然后停止,但是这样做不能够实现数组的轮询,轮番逐字打印”你好!“,包括打印单个字的时候只能打印第一个,只打印第二个字就做不到。

 那么我们该如何做呢?

我们可以使用二维数组来实现这个问题,使用%s让它完整打印一行直到\0,这个时候不会起冲突,因为理论上%s是完整的打印了整个一维数组。(如下图)

 

 但是这个时候如果使用%c就会出现乱码,%c会把arr[0]的三个值算一起然后继续算出一个乱码来。

最后总结一下%c和%s的区别:

%c:字符型,把输入的数字按照ascll码相应替换。

%s:字符串,输出字符串中的字符,直至字符串中的\0

%c输出单个字符,%s输出字符串

未经允许,禁止转载--------------------------------------------------------------------------------



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3