C语言零基础入门—4.标准输入输出
这一节的任务是讲解 标准输入输出格式 。
1. 计算机内部是如何进行存储的
通过前面的讲解我们知道了任何东西在计算机中的存储都是以0 / 1 串的形式存储的,这句话的意思就是:
- 无论是字符,字符串,数字 在计算机中的存储形式都是数字0 与1 的组合存储的。
- 比如:我们存储
int a = 3
的时候,编译器会自动把数字3转换成二进制的0/1串
00000000 00000000 00000000 00000011
- 上边的一串就是 3 转换成二进制的形式。
如果大家不会二进制的转换的话就先不用纠结,我们预计下一节好好讲讲二进制的转换 -
至于前边为什么有这么多0:它的类型是int类型,根据我们前一节讲的数据类型知道,int存储的时候在计算机中占四个字节,又根据一个字节等于8位,我们可以计算出来int类型在计算机中占有
4*8=32
位的存储空间。意思就是说:int在计算机中存储时占32位。既然占32位,(就是可以存放32个0或1),然而3的二进制是 11 ,显然只有两位,占不满32位,但是C语言中规定的是必须占32位,因此:占不满的时候,用0补充。
- 再比如:我们存储字符
char str = 'A' ;
的时候。编译器会根据ASCII码表找到大写 A 的十进制数字 65,然后再把65转化为二进制,再存储到计算机中。
什么是ASCII码:电脑编程是全球人类共同进行的一件事情,但是由于各个国家的文字都不一样,因此在编程的过程中,C语言编译器为了让每一个国家的人都可以正常使用,因此C语言编译器对字符的处理需要统一起来。(也就是任何一个国家都可以用的字符集)。
ASCII码就是一个字符集,他基本上把我们在编程中能用得上的符号,都进行了编码。让我们使用
-
这里仅仅列出一部分,大家感兴趣的可以自行百度。
2. 为什么需要标准输入输出
从上边的计算机内部的存储我们可以发现一个问题:
- 不论我们输入的是数字,字符还是字符串,在计算机的内部存储的都是0/1串。这个对于存储的时候是非常方便的,对吧。
- 但是问题来了,我们取这些数据的时候怎么取呢,他在计算机内部都是0与1,那我们的存大写字母A进去之后,要怎么样才能取出A呢?以及其他类型的数据要怎么样才能存取正常呢?
当然,这就需要格式化输入输出了。
3. 格式化输入输出
3.1 什么是格式化输入输出
根据以上的分析我们可以得出:
- 不论什么类型的数据,在计算机中存储都是0/1串。
- 存的时候我们需要将原始数据转换为0/1串进行存储。
- 取的时候自然也需要将0/1串转换为原始格式的数据了。
因此,输入 以及 输出 的时候我们都要指定当前的数据是什么类型。
- 只有指定了输入是什么类型之后,C语言编译器才会知道当前数据是什么类型,然后根据类型去转换为0/1串(比如:是数字的话直接转为二进制进行存储,是字符的话根据ascii找到对应的数字,再去转换为二进制)。
- 当指定了输出是什么类型的时候,C语言编译器才知道把从计算机存储器中得到的0/1串转换成什么类型的数据。(比如:当指定输出的时候用整形进行输出,那么就把0/1串转换为整形)
3.2 用 printf 进行格式化输出
printf函数被称为格式化输出函数,用来向终端(或者其他设备)输出若干个任意类型的数据。
- 输出的格式:
printf("格式控制" , "输出列表");
- 格式控制:是用双引号括起来的一个字符串,它包含 “格式声明” ,“普通字符” 两个内容。不懂的见解释。
- 输出列表:这里放置需要输出的变量名称,或者变量表达式。
解释:
- 格式声明说的是 我们用特定的符号来表示当前数据输出的数据是什么类型。
- 普通字符说的是 是在输出的时候可以原样输出的字符,我们用这些说明性的字符来让输出更加的美观。
-
举个栗子
int a = 3;
int b = 6;
printf("a = %d,b = %d",a,b);
输出的结果是:a = 3,b = 6
这个代码里边:
- 格式控制:"a = %d,b = %d" |
- 输出列表:a,b
- 在 格式控制 里边:
~ 格式声明:%d
~ 普通字符:a= ,b =
- 因此,我们也可以把 %d 理解为占位符,(就是在输出的时候,用%d把这个位置先给固定住类型,然后C语言编译器会自动从后边的输出列表进行从左到右的逐个匹配进行输出)
3.3 用scanf()进行格式化输入
scanf函数被称为格式化输入函数,用来从键盘输入指定格式的数据。
- 输入格式:
scanf("格式控制" , "地址表列");
- 格式控制:这里的格式控制与输出的相同,就不在赘述。
- 地址表列:这个是由若干个地址组成的表列,我们使用的时候只要记得在变量前边加上 & 符号就可以了,具体原因后边讲。
-
举个栗子
int a;
scanf("%d",&a);
得到的结果是:从键盘输入一个整数,赋值给变量a。
- 注意:我们不推荐在scanf的 格式控制 中使用普通字符,如:
scanf("a = %d",&a);
,我们不推荐使用 a =
进行修饰,我们建议直接使用scanf("%d",&a);
进而得到a的值。至于提示性的消息我们可以在scanf前边加上一个printf进行输出提示即可,比如:
int a;
printf("请输入变量a的值:");//当没有需要输出的变量的时候,输出列表可以省略
scanf("%d",&a);
得到:
请输入变量a的值://然后在此处输入一个整数即可
3.4 格式化输出控制符
以上的讲解我们都在使用int 以及 %d 进行讲解,因此大家应该可以想到,数据类型int的格式控制符号就是 %d,以此类推,每一个数据类型都有着对应的格式化控制符。
- %d:用于输出一个有符号的十进制整数。
- %c:用于输出一个字符。
- %s:用于输出一个字符串。
- %f:用于输出浮点数(带小数的数据)。
- 使用 %f 的时候,默认会输出六位小数。
- 也可以使用 %m.nf,意思是输出的浮点数中总共m位,其中小数占n位。
- 其他输出格式等用到了再说,一般很少用。
3.5 格式化输入控制符
- 一些常见的整数,字符,字符串,浮点数的输入 与输出的一样。
3.6 字符的输入输出
字符的输入输出比较特别,出了有%c的输入输出方式外。单独有着对应的函数进行输入输出。
- 字符输出函数:putchar()
char a='H',b='A';
putchar(a);
putchar(b);
输出:HA
- 字符输入函数:getchat()
a =getchat();
然后屏幕会停止等待你输入一个字符,用a进行存储
到目前为止顺序程序设计算是告一段落了,下一节准备讲 进制之间的转换,之后再做一些实战的代码演示,让大家深入的理解编程。