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