1.gets函数
在读取字符串时,scanf函数和%s转换说明符只能读取一个单词,于是早期就由gets函数承担了读取整行字符串的作用。gets函数读取整行输入,直至遇到换行符,然后丢弃换行符,接着储存其余字符,并在这些字符的末尾自动添加一个空字符,使其成为一个字符串。gets函数经常搭配puts函数使用,后者用于显示字符串,并在末尾自动添加换行符(即空出一行)。
使用方法如下:
char words[8];
printf("Please enter a string:\n");
gets(words);
不过在最新的C11标准中,gets函数已不被允许。比如visual studio 2019就无法使用gets函数。
2.fgets函数
fgets函数专门设计用于处理文件输入。fgets函数有三个参数,第二个参数为读取字符的最大数量,例如设定为n后,fgets函数将会读取n-1个字符,最后一个为换行符。第三个参数指明要读入的文件,要读入键盘输入的数据则以stdin作为参数。
fgets函数通常与fputs函数配合使用,fputs函数有2个参数,第二个参数指明要写入的文件,要显示在显示器上则以stdout作为参数。fputs函数不会再待输出字符串末尾添加换行符。
使用方法如下:
#include <stdio.h>
int main(void)
{
char words[8];
puts("Please enter a string:");
fgets(words, 8, stdin);
fputs(words, stdout);
return 0;
}
注:空格也算一个字符
如果超过了字符限制,后续的字符将不再读入。
scanf函数与以上两个函数不同之处在于,scanf类似于在读取单词,从第一个非空字符开始,到下一个空白字符结束,如果制定了宽度,如%10s,那么scanf将读取10个字符或读到空格停止。
(scanf返回值为成功读取的项数或EOF)