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

目录

一、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 语言中,有三个函数可以用来在显示器上输出数据,它们分别是:

  1. puts()能输出字符串,并且输出结束后会自动换行。  puts("CSDN:Sumjess");
  2. putchar()能输出单个字符。    char b = '$'; putchar(b);
  3. 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 Windows
getch() conio.h Windows

(2)输入字符串
gets() 是有缓冲区的,每次按下回车键,就代表当前输入结束了, gets() 开始从缓冲区中读取内容,这一点和 scanf()
是一样的。 gets() 和 scanf() 的主要区别是:

  • scanf() 读取字符串时以空格为分隔遇到空格就认为当前字符串结束了,所以无法读取含有空格的字符串。
  • gets() 认为空格也是字符串的一部分,只有遇到回车键才认为字符串输入结束,所以,不管输入了多少个空格,只要不按下回车键,对 gets() 来说就是一个完整的字符串。也就是说, gets() 能读取含有空格的字符串,而 scanf() 不能

四、总结

  1. C 语言中常用的从控制台读取数据的函数有五个,它们分别是 scanf()、 getchar()、 getche()、 getch() 和 gets()。其中 scanf()、 getchar()、 gets() 是标准函数,适用于所有平台;getche() 和 getch() 不是标准函数,只能用于 Windows。
  2. scanf() 是通用的输入函数,它可以读取多种类型的数据。
  3. getchar()、 getche() 和 getch() 是专用的字符输入函数,它们在缓冲区和回显方面与 scanf() 有着不同的特性,是scanf() 不能替代的。
  4. gets() 是专用的字符串输入函数,与 scanf() 相比, gets() 的主要优势是可以读取含有空格的字符串。
  5. 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---拷贝指定数量的字符串

发布了350 篇原创文章 · 获赞 684 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/qq_38351824/article/details/101925961
今日推荐