深入浅出C语言:(八)基础部分 NO.3 字符串和字符的输入和输出

mac2022-06-30  25

目录

一、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 语言数据输出大汇总

在 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()跳过相应的输出项。

二、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 语言输入字符和字符串(所有函数大汇总)

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() 不能

四、总结

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 用来获取某个数据类型或变量所占用的字节数。 int arr[] = { 99, 15, 100, 888, 252 }; int len = sizeof(arr) / sizeof(int); 求数组arr长度

5、暂不更新:strcmp()---比较字符串、strncmp---查找字符串、strcpy---拷贝字符串、strncpy---拷贝指定数量的字符串

 

最新回复(0)