不怎么重要的前言
上一篇我们介绍了什么是变数,也结合了资料型态来让大家了解,接下来大家有没有想过,如果遇到需要让使用者输入资料来处理,并输出对应结果时要怎么办呢?
接下来我们来结合变数,储存输入并输出资料内容吧!
需要输出变数、或用变数储存输入时怎么办?
在前面我们有提到过资料是有不同形态(字元、整数、浮点数等等的)的,而我们会用不同资料型态的变数来储存这个资料,但如果今天我们要把变数输出或读取输入储存到变数里时,要怎么做处理才能让电脑知道这个被输入或输出的资料,要以什么样的格式输出、要以什么样的型态储存?
这时候我们就会用到c语言中的一个语法--格式指定字,格式指定字听起来好像很複杂,但其实就是代替变数本身来表示整体输入输出格式的存在。
在c语言中我们第一个接触到的输出code就是「printf("Hello World!\n");」,其中「""」包含的东西我们会称他为字串,但是当我们需要输出的字串包含变数时,这时我们就会使用格式指定字,如以下:
#include <stdio.h>int main(){ int a = 3; printf("your data: %d\n", a); return 0;}
输出字串中的「%d」就是代替变数a的格式指令字,你可以把它当成变数在字串中的替代词,接下来我们将会介绍格式指令字有哪些。
格式指令字
我们先来複习一下前面第五篇的基本资料型态表吧:
类别 | 所佔记忆体(bytes) | 存什么样的资料 | 格式指定字 | char1字元,举凡a~z/0~9/单一符号(+-/*%$#@等)%cint4整数,数字範围从-2147483648~2147483647%dfloat4单精确度浮点数,即小数%fdouble8双精确度浮点数,即小数%f
我们可以从上面的表先简略的知道,基本的资料型态大概可以用这些格式指定字来表示,若只是读取使用者输入时用以上的格式指定字基本上就够了,但其实还有更多的格式指定字,且有时候若要输出资料内容时有其他指定格式,这些便不足以应付了。
所以以下我们会详细整理格式指令字:
整数
指令字 | 说明 | %d.%i十进制有号整数%u十进制无号整数%o八进制有号整数%x.%X十六进制有号整数%ld十进制long int%lld十进制long long int
(备注:有号(signed)、无号(unsigned),可以参考第五篇,不过无号相对较少使用)
浮点数
指令字 | 说明 | %f以小数形式输出浮点数(Ex. 输出12.345时为「12.345000」)%e以科学记号形式输出浮点数(Ex. 输出12.345时为「1.234500e+001」)%E以科学记号形式输出浮点数(Ex. 输出12.345时为「1.234500E+001」)%g依情况使用%f或%e(Ex. 输出0.345时为「0.345」、输出0.0000345时为「3.45e-005」)(虽然一般来说不会使用,但%g的输出判断可以参考这个连结)字元、字串
指令字 | 说明 | %c字元(是单一的字元)%s.%S字串(是多个字元)其他
指令字 | 说明 | %p输出指标%%用于输出时输出「%」%*是忽略符号,应用如%*d、%*c、%*s,会让程式忽略、丢弃这个资料%数字是设定资料宽度的用法,多用于输出,应用如%10d.%15s%-数字是设定置左的用法,同时也设定资料宽度,多用于输出,应用如%-10d.%-15s%[]用于输出时只读取「[]」内的字元,遇到非其内字元会停止读取,应用如%[aAbB]s、%[a-z]s%[^]用于输出时只读取「[]」之外的字元,遇到为其内字元时会停止读取,应用如%[^aAbB]s、%[^a-z]s
到这里就大致介绍完格式指令词了,如果有兴趣可以参考以下:
microsoft docs
格式特殊字元
看完上面的格式指令字应该大概知道一些语法了,接下来有些特殊字元也跟输出格式十分相关:
特殊字元 | 说明 | \nnew line的意思,即换行之符号\0字串结束符,输出字串时遇到这个特殊字元就会结束输出\ttab,跳格\r回到该行字首,输出时会覆盖先前输出(Ex. 输出12345\raaaa时为「aaaa5」)\bbackspace,倒退一格输出时可能覆盖先前输出(Ex. 输出12345\baaaa时为「1234aaaa」、输出12345\b时为「12345」)\abell,会发出系统声\|输出「\」\'输出「'」\"输出「"」
看到这里我们就大致看完影响字串格式的语法有哪些了,碍于每一种都要示範输出有点麻烦,大家可以多多尝试上面介绍到的语法!
下一篇我们会正式进入列印输出的printf!