
一、输入输出概念
- 1.2C语言本身不提供输入输出语句
- 1.3#include头文件放在程序中
二、printf输出数据
- 2.2格式字符
三、scanf输入数据
- 3.1scanf一般格式
四、输入输出函数
- 4.1putchar()
- 4.2getchar()
一、输入输出概念
在c语言的程序中,几乎每一个程序都是包含输出输入语句的,如果没有输入输出语句,那么这个程序是没有意义的。
##1.1输入输出是以计算机为主体而言的
常见的输出设备:显示器,打印机等
常见的输入设备:键盘,光盘,扫描仪等。
输入输出的 *** 作都是由c标准函数库中的函数来实现的,比如printf和scanf函数,printf和scanf不是c语言中的关键字,是库函数的名字。
C提供的标准函数以库的形式在C的编译系统中提供,它们不是C语言文本中的组成部分,不把输入输出作为C语句的目的是使C语言编译系统简单精炼,因为将语句翻译成二进制的指令是在编译阶段完成的,没有输出输入语句,就可以避免在编译阶段处理与硬件有关的问题,可以使编译系统简化,而且通用性强,可移植性好,在各种型号的计算机和编译环境下都可以适用,便于在各个计算机上实现。
#include
如果调用标准的输入输出函数,就必须在程序开头用#include指令,把stdio头文件包含到程序中。
stdio.h是头文件,文件名的后缀是".h",在头文件放了调用标准输入输出函数的信息,包括与标准I/O库有关的变量定义和宏定义,以及对函数的声明。
在对函数进行编译预处理的时候,系统就会把该在头文件中存放的内容调出来,取代本行的#inlcude指令。
值得说的是:
#include
#include “stdio.h”
区别: 编译系统从存放c编译体统的子目录中去找所包含的头文件(stdio.h) 二、printf输出数据
printf函数(格式输出函数)用来向终端(或系统隐含指定的输出设备)输出若干个任意类型的数据。 printf(格式控制,输出列表) 如:%d,%f等 例如: 2.2.1d格式,输出十进制整数。 输出: 域宽,在格式声明中指定输出数据的所占的列数 输出: 2.2.2 C格式符,用来输出一个字符 输出结果 同样也是可以指定域宽的。 运行结果: 一个整数在1~127范围中,也可以用%c按字符形式输出,在输出之前,系统会将该整数作为ASCII码转化成相应的字符。 输出结果: 如果整数比较大,则把它的最后一个字节的信息以字符形式输出 输出结果 2.2.3----s格式字符,用来输出一个字符串 输出结果 2.2.4—f格式符 运行输出: 运行结果 注意: 运行结果: 也可以用%m.ne或者%m.nE形式的格式声明。 输出为: 2.2.6其他格式 运行结果: -1以补码形式存放在4个字节中,2^3=8,所以每3位构成一组 运行结果: 用G时,若以指数形式输出,则指数以大写形式表示。 printf函数常用的格式附加字符 三、scanf输入数据
3.1scanf一般格式
格式: 是**变量地址**
例如: ###3.2格式声明 ###3.3注意的问题 (2)输入的内容应该与格式控制的格式是保持一致的。 那么输入的内容为 (3)在使用%c输入字符的时,空格字符和转义字符都作为有效字符输入。 此时应该输入三个连续的字符,中间不能有空格! 如果在中间输入空格就错了 系统会把第一个字符‘a’送给c1,第二个字符是空格字符‘ ’,送给c2,第三个字符‘b’送给c3. 输入
123送给c,后面几个字符没有读入。
四、输入输出函数
除了printf和scanf函数可以作为字符的输出和输入以外,putchar和getchar也是可以进行字符的输入输出的。 一般格式(如下) 例如1: 运行结果: 运行结果是 putchar也可以输出转义字符 getchar函数是只能输入一个字符。 如果想输出多个字符则需要用多个getchar获取。 注意:这是在连续输入BOY后按Enter健,字符才送到计算机中,然后输出BOY字符。 运行结果: 也可以在printf中输出杠接收的字符 例如2:从键盘输入大写字母,小写输出。 运行结果 运行结果: 欢迎分享,转载请注明来源:内存溢出
1.#include
如果是要使用系统的库函数,因而要包含系统所提供相应的头文件,这时以标准方式为宜。
2.#.include "stdio.h"是用户自己写的头文件,编译系统会先在用户存放源程序的子目录中寻找要包含的文件,若找不到,再按标准方式查找。
如果用户想包含的头文件不是系统提供相应的头文件,而是用户自己编写的文件,这时应用“”形式,否则找不到自己的所需要的文件。
也可以写文件所在的目录
#include “C: \ temp \ file.h”
##2.1一般格式
1.格式控制用“”括起来,且包含格式声明。
2.输出列表可以是常量,变量,或者表达式
2.2格式字符
长整型数据%ld
双长整数据%lldprintf("%d\n%d\n",12,-123);
12
123
printf("%5d\n%5d\n",12,-123);
//指定输出数据占5列,输出的数据显示在此5列区域的右侧
12 //12前面有三个空格
-123 //-123前面有一个空格
例如:char ch = 'a';
printf("%c\n",ch);
a
例如:printf("%5c",ch);
a //前面有4个空格
例如:short B = 97;
printf("%c",B);
a
int a = 377;
printf("%c",a);
最后一个字节的信息是01111001十进制是121,对应的ASCII码是’y’y
printf("%s","WELCOME");
WELCOME
用来输出单精度,双精度,长双精度的实数,以小数形式输出。
不用指定输出数据的长度,系统决定:
实数中整数部分全部输出,小数部分输出6位
例如:#include 0.333333
可以使输出的数据上下行必按小数点对齐,使输出数据整齐美观。#include 0.333333333333333
//0的前面有3个空格
float型数据只能保证6位有效数字,
double型只能保证15位有效数字。
即使指定小数位数为50位,也不能保证输出的50位都是有效的数字。
当数据长度不超过m时,数据向左靠,右端补空格。
例如:#include
第一次输出:
a向左端靠齐,右端空5列
第二次输出:
a向右端靠,左端空5列
2.2.5—e格式符
%e指定用指数形式输出实数。
编译器默认小数为6位,指数部分为5位(e占1列,符号1列,指数3列)
数值按标准化指数形式输出,小数点前必须有而且只有1位非零数字。
例如:1.234560 e+002
6列 5列
printf("%13.2e",123.456);
printf("%13.2E",123.456);
1.23e+002//数的前面有4个空格
1.23E+002//数的前面有4个空格
用的不多,必要时可以查阅。
例如:int a = -1;
printf("%d\t%o\n",a,a);
-1 37777777777
3.x或X十六进制输出
常见是#x或者#X表示输出0X~~int a = -1;
printf("%d\n",a);
printf("%o\n",a);
printf("%x\n",a);
printf("%#X\n",a);
4.u格式—无符号型的数据,以十进制整数形式输出。
5.g格式—用来输出浮点数。
printf函数中用到的格式字符格式字符 说明 d,i 输出有符号的十进制整数(整数不输出符号) u 输出无符号的十进制整数 o 输出无符号的八进制整数(不输出前o) x,X 输出无符号的十六进制的整数,(不输出前导符0x),用x输出小写的a~f,用X时,以大写字母输出 c 输出单个字符 s 输出字符串 f 输出实数可以用小数形式或者指数形式输出,以及隐含的6位小数 e,E 以指数形式输出,用e时输出(如:1.2e+02)用E时(如:1.2E+02) g,G 选用%f或%e格式输出宽度较短的一种格式,不输出无意义的0。 字符 说明 l 长整型整数,可加在格式符d,o,x,u前面 m(正整数) 数据最小宽度 n(正整数) 对实数表示输出n位小数;对字符串,表示截取的字符个数 - 输出的数字或者字符在域内向左靠 scanf(格式控制,地址列表)
格式控制:与printf的含义相同,
地址列表:可以是变量的地址,也可以是字符串的首地址。scanf("a=%f,b=%f,c=%f",&a,&b,&c);
scanf常用的格式字符格式字符 说明 d,i 输入有符号的十进制整数 u 输入无符号的十进制整数 o 输入无符号的八进制整数 x,X 输入无符号的十六进制的整数 c 输入单个字符 s 输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束,‘\0’作为字符串的结束标志。 f 输入实数可以用小数形式或者指数形式输入 e,E,g,G 与f作用相同 l 输入长整型数据(%ld,%lo,%lx,%lu)以及double数据(%lf或者%le) h 输入短整型数据(%hd,%ho,%hx) 域宽 指定输入数据所占的宽度,域宽为正整数 * 本输入项在读入后不赋给相应的变量
使用scanf函数应该注意的地方
(1)输入的时候是变量的地址,不是变量名。scanf(“%f”,a);//错误,a是一个变量名
scanf("%f",&a);//正确
例如:scanf(“a=%f,b=%f,c=%f”,&a,&b,&c);
a=1,b=2,c=3//在按回车
如果输入时不是逗号而是空格或者其他字符就是错误的
如果输出
1 2 3//就是错误的
因为系统会把它和scanf函数中的格式字符串逐个字符对照检查,
只是在%f的位置上代以一个浮点数
scanf("%c%c%c",&c1,&c2,&c3);
abc
'a'送给c1
'b'送给c2
'c'送给c3
a b c
(4)在输入数值数据时,如果遇到回车,空格,Tab建或者非法字符,认为该数据结束。
例如:scanf("%d%c%f",&a,&b,&c);
1234a123o.26
%d对应十进制数1234所以1234表示a
%c表示输入一个字符a是一个字符,所以a送给了b
由于%c只要求输入一个字符,系统判定已经结束输入。
作用:输出字符变量c的值,c可以是字符常量,整型常量,字符变量或整型变量(其值在字符的ASCII码代码范围内)输出的是一个字符purchar(c);
#include
字符类型也属于整数类型,因此将一个字符赋给字符变量和将数字符的ASCII码赋给字符变量的作用是一样的(整型数据范围在0~127).putchar是输出字符,会把数字转化成对应的字符。#include BOY
4.2getchar()
putchar('1');//输出字符A
putchar('\");//输出单撇号\'
putchar('5');//八进制的15=十进制13,对应的ASCII是“回车”,不换行
getchar()输入-1或者按ctr+d会结束。
例如:从键盘输入BOY的3个字符,然后输出到屏幕上。
思路:用3个getchar获取字符,然后在用putchar输出。#include
输出结果:
如果:输入B后按空格在输入O,在按空格,再输入Y,结果会是怎么样的呢?
我们可以发现输出的结果只输出了两个字符。
输入的B赋给了变量a,空格也是一个字符,于是空格赋给了变量b,接着把空格赋给了变量c,而Y就没有送给任何一个变量,此时putchar输出的只有B O ,然后执行换行,没有Y。
这里说明一下:
在用键盘输入信息的时候,并不是键盘敲一个字符,就立刻送到计算机中去,而是这些字符暂缓存放在缓冲区中只有按了Enter才能把这些字符一起送到计算机中,然后按先后顺序分别赋给相应的变量
注意:
使用putchar不仅可以获取显示的字符,也可以获取屏幕上无法显示的字符,如控制字符
改一下以上的程序:把getchar作为表达式的一部分#include BOY
BOY
printf("%c",getchar());//%c是输出字符的格式声明
#include
思路:小写和大写的ASCII码相差32。#include
也可以用printf输出#include
微信扫一扫
支付宝扫一扫
评论列表(0条)