目录
一、C 语言数据输出大汇总puts()、putchar()、printf()
二、scanf 读取从键盘输入的数据(含输入格式汇总表)scanf
三、C 语言输入字符和字符串(所有函数大汇总)getchar()、 getche()、 getch()、gets()
四、总结
1、puts
5、暂不更新:strcmp()---比较字符串、strncmp---查找字符串、strcpy---拷贝字符串、strncpy---拷贝指定数量的字符串
6、ctype.h 也暂不更新,里面包含判断是否是 数字、字符、字母、标点符号、空格等
一、C 语言数据输出大汇总
在 C 语言中,有三个函数可以用来在显示器上输出数据,它们分别是:
- puts():只能输出字符串,并且输出结束后会自动换行。 puts("CSDN:Sumjess");
- putchar():只能输出单个字符。 char b = '$'; putchar(b);
- printf():可以输出各种类型的数据。
printf() 是最灵活、最复杂、最常用的输出函数,完全可以替代 puts() 和 putchar()。
格式控制符 | 说明 |
%c | 输出一个单一的字符 |
%hd、 %d、 %ld | 以十进制、有符号的形式输出 short、 int、 long 类型的整数 |
%hu、 %u、 %lu | 以十进制、无符号的形式输出 short、 int、 long 类型的整数 |
%ho、 %o、 %lo | 以八进制、不带前缀、无符号的形式输出 short、 int、 long 类型的整数 |
%#ho、 %#o、 %#lo | 以八进制、带前缀、无符号的形式输出 short、 int、 long 类型的整数 |
%hx、 %x、 %lx | 以十六进制、不带前缀、无符号的形式输出 short、 int、 long 类型的整数。如果 x 小写,那 么输出的十六进制数字也小写;如果 X 大写,那么输出的十六进制数字也大写。 |
%#hx、 %#x、 %#lx | 以十六进制、带前缀、无符号的形式输出 short、 int、 long 类型的整数。如果 x 小写,那么 输出的十六进制数字和前缀都小写;如果 X 大写,那么输出的十六进制数字和前缀都大写。 |
%f、 %lf | 以十进制的形式输出 float、 double 类型的小数 |
%e、 %le | 以指数的形式输出 float、 double 类型的小数。如果 e 小写,那么输出结果中的 e 也小写;如果 E 大写,那么输出结果中的 E 也大写。 |
%g、 %lg | 以十进制和指数中较短的形式输出 float、 double 类型的小数,并且小数部分的最后不会添加多余的 0。如果 g 小写,那么当以指数形式输出时 e 也小写;如果 G 大写,那么当以指数形式输出时 E 也大写。 |
%s | 输出一个字符串 |
标志字符 | 含 义 |
- | -表示左对齐。如果没有,就按照默认的对齐方式,默认一般为右对齐。 |
+ | 用于整数或者小数,表示输出符号(正负号)。如果没有,那么只有负数才会输出符号。 |
空格 | 用于整数或者小数,输出值为正时冠以空格,为负时冠以负号。 |
# | 对于八进制(%o)和十六进制(%x / %X)整数, # 表示在输出时添加前缀;八进制的前缀是 0,十六进制的前缀是 0x / 0X。 对于小数(%f / %e / %g), # 表示强迫输出小数点。如果没有小数部分,默认是不输出小数点的,加上 # 以后,即使没有小数部分也会带上小数点。 |
4.printf()和scanf()的*修饰符
二、scanf 读取从键盘输入的数据(含输入格式汇总表)
在 C 语言中,有多个函数可以从键盘获得用户输入:
- scanf():和 printf() 类似, scanf() 可以输入多种类型的数据。
- getchar()、getche()、getch():这三个函数都用于输入单个字符。
- gets():获取一行数据,并作为字符串处理。(原理:读取整行输入直到遇到换行符,然后丢弃换行符,加上空字符,结束,使其成为一个字符串)
scanf() 有两个以空格分隔的%d,后面还跟着两个变量,这要求我们一次性输入两个整数,并分别赋值给 c 和 d。注意"%d %d"之间是有空格的,所以输入数据时也要有空格。 对于 scanf(),输入数据的格式要和控制字符串的格式保持一致。
scanf() 格式控制符汇总
格式控制符 | 说明 |
%c | 读取一个单一的字符 |
%hd、 %d、 %ld | 读取一个十进制整数,并分别赋值给 short、 int、 long 类型 |
%ho、 %o、 %lo | 读取一个八进制整数(可带前缀也可不带),并分别赋值给 short、 int、 long 类型 |
%hx、 %x、 %lx | 读取一个十六进制整数(可带前缀也可不带),并分别赋值给 short、 int、 long 类型 |
%hu、 %u、 %lu | 读取一个无符号整数,并分别赋值给 unsigned short、 unsigned int、 unsigned long 类型 |
%f、 %lf | 读取一个十进制形式的小数,并分别赋值给 float、 double 类型 |
%e、 %le | 读取一个指数形式的小数,并分别赋值给 float、 double 类型 |
%g、 %lg | 既可以读取一个十进制形式的小数,也可以读取一个指数形式的小数,并分别赋值给 float、 double 类型 |
%s | 读取一个字符串(以空白符为结束) |
注意事项:
- scanf()在读取输入时就已经完成了在末尾加/0(空字符)的操作。
- scanf的例子
三、C 语言输入字符和字符串(所有函数大汇总)
C 语言有多个函数可以从键盘获得用户输入,它们分别是:
- scanf():和 printf() 类似, scanf() 可以输入多种类型的数据。
- getchar()、 getche()、getch():这三个函数都用于输入单个字符。
- gets():获取一行数据,并作为字符串处理。
(1)输入单个字符:
① getchar()
getchar()就是 scanf("%c", c)的替代品
② getche()
getche() 没有缓冲区,输入一个字符后会立即读取,不用等待用户按下回车键
getch()
getch() 也没有缓冲区,输入一个字符后会立即读取,不用按下回车键,所谓回显,就是在控制台上显示出用户输入的字符;没有回显,就不会显示用户输入的字符,就好像根本没有输入一样。例如输入密码,有回显是非常危险的,容易被偷窥。
输入@后, getch() 会立即读取完毕,接着继续执行 printf() 将字符输出。但是由于 getch() 没有回显,看不到输入的@字符,所以控制台上最终显示的内容为 c: @。
对三个函数的总结
函数 | 缓冲区 | 头文件 | 回显 | 适用平台 |
getchar() | 有 | stdio.h | 有 | Windows、 Linux、 Mac OS 等所有平台 |
getche() | 无 | conio.h | 有 | Windows |
getch() | 无 | conio.h | 无 | Windows |
(2)输入字符串
gets() 是有缓冲区的,每次按下回车键,就代表当前输入结束了, gets() 开始从缓冲区中读取内容,这一点和 scanf()
是一样的。 gets() 和 scanf() 的主要区别是:
- scanf() 读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了,所以无法读取含有空格的字符串。
- gets() 认为空格也是字符串的一部分,只有遇到回车键时才认为字符串输入结束,所以,不管输入了多少个空格,只要不按下回车键,对 gets() 来说就是一个完整的字符串。也就是说, gets() 能读取含有空格的字符串,而 scanf() 不能。
四、总结
- C 语言中常用的从控制台读取数据的函数有五个,它们分别是 scanf()、 getchar()、 getche()、 getch() 和 gets()。其中 scanf()、 getchar()、 gets() 是标准函数,适用于所有平台;getche() 和 getch() 不是标准函数,只能用于 Windows。
- scanf() 是通用的输入函数,它可以读取多种类型的数据。
- getchar()、 getche() 和 getch() 是专用的字符输入函数,它们在缓冲区和回显方面与 scanf() 有着不同的特性,是scanf() 不能替代的。
- gets() 是专用的字符串输入函数,与 scanf() 相比, gets() 的主要优势是可以读取含有空格的字符串。
- scanf() 可以一次性读取多份类型相同或者不同的数据, getchar()、 getche()、 getch() 和 gets() 每次只能读取一份特定类型的数据,不能一次性读取多份数据。
五、相关函数例程:
字符串输入
1、不幸的gets(现大部分编译器不支持)
2、fgets()
3、gets_s()
相比于fgets(words,STLEN,stdin) ,
@@@ gets_s(words,STLEN)只有2个参数,只能从标准输入中读取数据,所以第三个参数默认stdin;
@@@ gets_s(words,STLEN)不储存换行符;
@@@特性:读到最大字符数都未读取到换行符,会把首字符设置为空字符,一直读取并丢弃后面得输入直到读到换行符或文件结尾;
(4) s_gets ()
第335页,不提倡使用;
(5)scanf()
添加字符宽度预防溢出
字符串输出
1、puts
2、fputs()
fputs(words,stdout)
@@ 第二个参数指名要写入数据的文件,打印在显示器上用stdout;
@@ 与puts不同不在输出的末尾添加换行符;
(3) printf()
略
六、字符串函数
1、strlen()---统计字符串的长度
2、strcat()---拼接字符串
3、strncat()---可指定添加最大字符数
4、sizeof---获取某个数据类型或变量所占用的字节数
- 获取某个数据类型的长度可以使用 sizeof 操作符。
- sizeof 用来获取某个数据类型或变量所占用的字节数。
5、暂不更新:strcmp()---比较字符串、strncmp---查找字符串、strcpy---拷贝字符串、strncpy---拷贝指定数量的字符串