C语言学习系列:输入&输出

输入即向程序填充数据。

输出即在屏幕上、打印机或者文件中显示数据。

标准文件

C语言将一切设备都当做文件,这和 Linux 类似。

以下三个文件会在程序执行时自动打开,以便访问键盘和屏幕(文件指针是访问文件的方式)。

标准文件 文件指针 设备
标准输入 stdin 键盘
标准输出 stdout 屏幕
标准错误 stderr 您的屏幕

scanf() & printf() 函数

scanf()

int scanf(const char * restrict format,...);

函数 scanf() 是从标准输入流 stdin 中读内容的,可以说明的格式读入多个字符,并保存在对应地址的变量中。 

函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表(除第一个参数以外的所有参数)中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。

scanf函数返回成功读入的数据项数(但由于星号修饰符而读入未赋值的域不计算在内),读入数据时遇到了“文件结束”或者 遇到错误则返回EOF (EOF 的值是-1,使用 ~ 按位取反(-1的补码每一位都是1)为 0)。

补充:

原码是最高位为符号位,正数该位为0,负数该位为1,其余位为数值位,(0有两种表示:+0和-0),其余位表示数值的大小

正整数的补码是其二进制表示,与原码相同。负整数的补码,将其原码除符号位外的所有位取反后加1。数0的补码表示是唯一的,每一位为0。

格式指令说明:

1. *

表示读入的数据将被舍弃。带有*的格式指令不对应可变参数列表中的任何数据。

2. 域宽

以一个非零的十进制整数形式出现。表示该格式指令最多读入的字符数。

3. 格式说明符

c   读入域宽指定的数目个字符组成的字符序列(后面不会加上空字节),如果省略宽度则读入单字符。如%c或%1c读入单字符,%2c读入两个字符(后面不会加上空字节),以此类推。

s    读入一个的字符序列,后面会加上空字节,遇到空白字符(\t \r \n 空格等)完成读取。

d    读入可选有符号(可选有符号表示输入时可以带符号也可以不带符号,不带符号则视为非负)十进制整数。

u    读入无符号符号十进制整数。

i     读入可选有符号整数。

a,e,f,g,A,E,F,G    读入可选有符号浮点数。

o    读入可选有符号八进制整数。

x,X  读入可选有符号十六进制整数。

p     读入一个指针值。

n     不读入任何字符,而是把到该位置已读入的字符数存储到与之对应的 int* 指向的位置。

%    读入% 符号。

[ ]    读扫描集匹配的字符入字符数组。扫描集定义一个字符集合,可由 scanf() 读入其中允许的字符并赋给对应字符数组。 扫描集合由一对方括号中的一串字符定义,左方括号前必须缀以百分号。 例如%[ABC] ,%[A-Z],用字符 ^ 可以说明补集。使用扫描集时,scanf() 连续吃进集合中的字符并放入对应的字符数组,直到发现不在集合中的字符为止(即扫描集仅读匹配的字符)。返回时,数组中放置以 null 结尾、由读入字符组成的字符串。

4. 长度修饰符

hh与d, i, o, u, x, X, or n配合使用,表示对应一个signed char或unsigned char数据。

h与d, i, o, u, x, X, or n配合使用,表示对应一个short int或unsigned short int数据。

l 与d, i, o, u, x, X, or n配合使用,表示对应一个long int或unsigned long int数据;与a, A, e, E, f, F, g, or G配合使用表示对应一个double数据;与c,s,[配合使用表示对应wchar_t数据。

ll与d, i, o, u, x, X, or n配合使用,表示对应一个long long int或unsigned long long int数据。

j与d, i, o, u, x, X, or n配合使用,表示对应一个intmax_t或uintmax_t数据。

z与d, i, o, u, x, X, or n配合使用,表示对应一个size_t数据(或与size_t对应的有符号整型数据)。

t与d, i, o, u, x, X, or n配合使用,表示对应一个ptrdiff_t数据(或与ptrdiff_t对应的无符号整型数据)。

L 与a, A, e, E, f, F, g, or G配合使用,表示对应一个long double数据。

printf()

int printf(const char *format, ...);

函数返回值为整型。若成功则返回输出的字符数,输出出错则返回负值。

调用形式为:printf("<格式化字符串>", <参量表>);

其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符,用来确定输出内容格式。参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出参数个数一样多, 各参数之间用","分开, 且顺序一一对应。

规定符

%d   十进制有符号整数

%u   十进制无符号整数

%f     浮点数

%s    字符串

%c    单个字符

%p    指针的值(地址)

%e    指数形式的浮点数

%x, %X    无符号以十六进制表示的整数

%o     无符号以八进制表示的整数

%g     把输出的值按照%e或者%f类型中输出长度较小的方式输出

%p     输出地址符

%lu    32位无符号整数

%llu    64位无符号整数

1) 可以在“%”和字母之间插进数字表示最大场宽。如果字符串的长度、或整型数位数超过说明的场宽,将按其实际长度输出对浮点数,若整数部分位数超过了说明的整数位宽度,将按实际整数位输出;若小数部分位数超过了说明的小数位宽度,则按说明的宽度以四舍五入输出。如果用浮点数表示字符或整型量的输出格式,小数点后的数字代表最大宽度,小数点前的数字代表最小宽度。

2)n 换行    \f 清屏并换页    \r 回车    \t Tab符

3)可以控制输出左对齐或右对齐,即在"%"和字母之间加入一个"-"号可说明输出为左对齐, 否则为右对齐。

4)可以在“%”和字母之间加小写字母l,表示输出的是长型数。

getchar() & putchar() 函数

getchar()

int getchar(void);

getchar由宏实现:#define getchar() getc(stdin),该函数声明在 stdio.h 头文件中,使用的时候要包含stdio.h头文件。。

getchar有一个int型的返回值。getchar函数的返回值是用户输入的字符的ASCII码,若文件结尾则返回-1(EOF),且将用户输入的字符回显到屏幕。

当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止

当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符。如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才等待用户按键。

putchar()

int putchar(int char);

(1)当char为一个被单引号(英文状态下)引起来的字符时,输出该字符(注:该字符也可为转义字符);

(2)当char为一个介于0~127(包括0及127)之间的十进制整型数时,它会被视为对应字符的 ASCII 代码,输出该 ASCII 码对应的字符;

(3)当char为一个事先用char定义好的字符型变量时,输出该变量所指向的字符。

gets() & puts() 函数

gets()

gets()函数用来从标准输入设备(键盘)读取字符串直到换行符(\n(我们输入的回车))结束,但换行符会被丢弃,然后在末尾添加'\0'字符。

char *gets(char *str);

其中str为字符串变量(字符串数组名或字符串指针)

返回值:

读入成功,返回与参数buffer相同的指针;

读入过程中遇到EOF或发生错误,返回NULL指针。所以在遇到返回值为NULL的情况,要用 ferror 或 feof函数检查是发生错误还是遇到EOF。

gets(s)函数与scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。

puts()

puts()函数用来向标准输出设备(屏幕)输出字符串并换行,具体为:把字符串输出到标准输出设备,将'\0'转换为回车换行。

int puts(const char *str);

其中str为字符串变量(字符串数组名或字符串指针);

将字符串输出到终端,puts函数一次只能输出一个字符串,字符串中可以包括转移字符。

puts(s)的作用与语句 printf("%s”,s) 的作用基本相同,puts() 函数只能输出字符串,不能输出数值或进行格式变换。puts()函数在输出字符串后会自动输出一个回车符

发布了161 篇原创文章 · 获赞 90 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_42415326/article/details/104027452