0%

C字符串输入输出

如果想把一个字符串读入程序,首先必须预留储存该字符串的空间,然后用输入函数获取该字符串。

gets()函数和puts()函数

gets()函数读取整行输入,直至遇到换行符,然后丢弃换行符,存储其余字符,并在这些字符末尾添加一个空字符,使其成为一个C字符串。

1
2
#include <stdio.h>
char *gets( char *str );

puts()函数显示字符串,并在末尾添加换行符,成功返回非负值,失败返回EOF。puts(words)相当于printf(“%s\n”,words)

1
2
#include <stdio.h>
int puts( char *str );

fgets()函数和fputs()函数

该函数专门用于处理文件输入。

fgets()函数的第2个参数指明了读入字符的最大数量。如果该参数是n,那么fgets()读入n-1个字符,或者遇到第一个换行符为止。如果fgets()函数读到一个换行符,会把换行符存储在字符串中(和gets()区别)。

fgets()函数的第3个参数指明要读入的文件。如果是从键盘输入,将stdin(标准输入)作为参数。

fgets()函数返回指向char的指针。如果正常读入,返回的地址和传入的第1个参数相同。如果读入异常,返回空指针(C语言中用宏NULL来表示)

1
2
#include <stdio.h>
char *fgets( char *str, int num, FILE *stream );

fputs()函数,它不会在末尾添加换行符。如果是从屏幕输入,将stdout(标准输出)作为参数。

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

gets_s()函数

gets_s()只从标准输入中读取数据,所以不需要第三个参数。并且gets_s()读到换行符会丢弃它而不是存储它。

如果gets_s()读到最大字符数都没有读到换行符,会执行以下几步。首先把目标数组中的首字符设置为空字符,读取并丢弃随后的输入直至读到换行符或者文件结尾,然后返回空指针。接着,调用依赖实现的“处理函数”,可能会中止或退出程序。

以上的特性说明,只要输入行未超过最大字符数,gets_s()和gets()几乎一模一样,完全可以替换!

scanf()函数和printf()函数

scanf()有两种方法确定输入结束:%5s,读取5个字符或者读到第一个空白停止。

输入语句 原输入序列 name中的内容 剩余输入序列
scanf(“%s”,name); Fleebert▢Hup Fleebert ▢Hup
scanf(“%5s”,name); Fleebert▢Hup Fleeb bert▢Hup
scanf(“%5s”,name); Ann▢Ular Ann ▢Ular

注:▢表示空格

printf()函数主要是使用其格式化功能。

自定义输入输出函数

不一定非要使用C库中的标准函数,如果无法使用这些函数或不想使用它们,完全可以在getchar()和putchar()的基础上自定义所需的函数。