六、字符串处理(6.1)

6.1 字符串输入/输出

        在程序当中,经常需要在程序运行过程中打印出一些信息,将其输出显示到标准输出设备 stdout(譬如屏幕)或标准错误设备 stderr(譬如屏幕),譬如调试信息、报错信息、中间产生的变量的值等等,以实现对程序运行状态的掌控和分析。

        有时程序在运行过程中还需要从标准输入设备 stdin(譬如键盘)中读取字符串,将读取到的字符串进行解析,以指导程序的下一步动作、控制程序执行流程。

6.1.1字符串输出

        常用的字符串输出函数有 putchar()、puts()、fputc()、fputs()。我们经常使用 printf()函数来输出字符串信息,原因在于 printf()可以按照自己规定的格式输出字符串信息,一般称为格式化输出。但是在实际编程中, putchar()、 puts()、 fputc()、 fputs()这些库函数在使用上方便、简单。

        putchar()、puts()、fputc()、fputs()这些函数也是标准 I/O 函数,属于标准 C 库函数,所以需要包含头文件<stdio.h>,并且它们也使用 stdio 缓冲

 puts()函数

         puts()函数用来向标准输出设备(屏幕、显示器)输出字符串并自行换行。把字符串输出到标准输出设备,将' \0 '转换为换行符' \n '。

#include <stdio.h>
int puts(const char *s);

函数参数
    s:需要进行输出的字符串。
返回值:
    成功返回一个非负数;失败将返回 EOF,EOF 其实就是-1。

        使用 puts()函数内部会自动在其后添加一个换行符。所以,如果只是单纯输出字符串到标准输出设备,而不包含数字格式化转换操作,那么使用 puts()会更加方便、简洁

putchar()函数

        putchar()函数可以把参数 c 指定的字符(一个无符号字符)输出到标准输出设备,其输出可以是一个字符,可以是介于 0~127 之间的一个十进制整型数(包含 0 和 127,输出其对应的 ASCII 码字符),也可以是用 char 类型定义好的一个字符型变量。

#include <stdio.h>
int putchar(int c);

/*函数参数
    c:需要进行输出的字符。
返回值:
    出错将返回 EOF。*/

 fputc()函数

        与 putchar()类似,也用于输出参数 c 指定的字符(一个无符号字符),与 putchar()区别在于,putchar()只能输出到标准输出设备,而 fputc()可把字符输出到指定的文件中,既可以是标准输出、标准错误设备,也可以是一个普通文件。

#include <stdio.h>
int fputc(int c, FILE *stream);

函数参数
    c:需要进行输出的字符。
    stream:文件指针。
返回值:
    成功时返回输出的字符;出错将返回 EOF。

 fputs()函数

        与 puts()类似,也用于输出一条字符串,与 puts()区别在于,puts()只能输出到标准输出设
备,而 fputs()可把字符串输出到指定的文件中,既可以是标准输出、标准错误设备,也可以是一个普通文件。

#include <stdio.h>
int fputs(const char *s, FILE *stream);

函数参数
    s:需要输出的字符串。
    stream:文件指针。
返回值:
    成功返回非负数;失败将返回 EOF。

6.1.2字符串输入

        常用的字符串输入函数有 gets()、getchar()、fgetc()、fgets()。scanf()与这些函数相比,在功能上确实有它的优势,但是在使用上不如它们方便、简单、更易于使用。

        gets()、getchar()、fgetc()、fgets()这些函数也是标准 I/O 函数,属于标准 C 库函数,所
以需要包含头文件<stdio.h>,并且它们也使用 stdio 缓冲。

gets()函数

        用于从标准输入设备(譬如键盘)中获取用户输入的字符串。不管我们输入的是空格、单引号、双引号都会作为 gets()获取到的字符串的一部分,直到用户输入回车换行符结束。

#include <stdio.h>
char *gets(char *s);
函数参数
    s:指向字符数组的指针,用于存储字符串。
返回值:
    如果成功,该函数返回指向 s 的指针;
    如果发生错误或者到达末尾时还未读取任何字符,则返回 NULL。

        用户从键盘输入的字符串数据首先会存放在一个输入缓冲区中。gets()函数会从输入缓冲区中读取字符串存储到字符指针变量 s 所指向的内存空间,当从输入缓冲区中读走字符后,相应的字符便不存在于缓冲区了。
        输入的字符串中就算是有空格也可以直接输入,字符串输入完成之后按回车即可,gets()函数不检查缓冲区溢出。

getchar 函数

        用于从标准输入设备中读取一个字符(一个无符号字符)。

#include <stdio.h>
int getchar(void);

无需传参。
返回值:
    该函数以无符号 char 强制转换为 int 的形式返回读取的字符,
    如果到达文件末尾或发生读错误,则返回 EOF。

        getchar()只从输入缓冲区中读取一个字符,与 scanf 以%c 格式读取一样,空格、TAB 制表符、回车符都将是正常的字符。即使输入了多个字符,但 getchar()仅读取一个字符。

fgets 函数

        与 gets()一样用于获取输入的字符串。

#include <stdio.h>
char *fgets(char *s, int size, FILE *stream);

/*函数参数:
    s:指向字符数组的指针,用于存储字符串。
    size:这是要读取的最大字符数。
    stream:文件指针。*/

 fgets()与 gets()的区别主要是三点:
        ⚫ gets()只能从标准输入设备中获取输入字符串,而 fgets()既可以从标准输入设备获取字符串、也可以从一个普通文件中获取输入字符串。
        ⚫ fgets()可以设置获取字符串的最大字符数。
        ⚫ gets()会将缓冲区中的换行符'\n'读取出来、将其丢弃、将'\n'替换为字符串结束符'\0';fgets()也会将缓冲区中的换行符读取出来,但并不丢弃,而是作为字符串组成字符存在,读取完成之后自动在最后添加字符串结束字符'\0'。

        使用 fgets()读取文件中输入的字符串,文件指针会随着读取的字节数向前移动。

fgetc 函数

        与 getchar()一样,用于读取一个输入字符。

#include <stdio.h>
int fgetc(FILE *stream);

/*函数参数:
    stream:文件指针。
返回值:
    该函数以无符号 char 强制转换为 int 的形式返回读取的字符,
    如果到达文件末尾或发生读错误,则返回 EOF。*/

        getc 可以指定输入字符的文件,既可以从标准输入设备输入字符,也可以从一个普通文件中输入字符,其它方面与 getchar 函数相同。

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值