C语言字符串的输入函数
作者:互联网
C语言字符串的输入函数
scanf()
// 声明
int scanf(const char *format, ...)
scanf()
遇到非空白字符输入结束,即一次只能读取一个单词。
gets()
// 声明
char *gets(char *str);
gets()
从stdin
读取整行输入,直到遇到换行符(丢弃换行符,储存其余字符,在末尾添加\0
),与puts()
配对使用。
但是gets()
唯一的参数是str
,不能检查数组能否容纳输入内容,如果输入内容过长,会导致缓冲区溢出,多出的字符可能擦除程序中的其它数据,导致程序异常。
fgets()
// 声明
char *fgets(char *str, int n, FILE *stream)
fgets()
函数多用于处理文件的输入,可以通过第二个参数限制读入的字符数,如果该参数的值为\(n\),则fgets()
将读入\(n-1\)个字符,或者在这之前遇到第一个换行符停止
注:
fgets()
读到的第一个换行符会将其储存在字符串中;
gets()
会丢弃换行符输出时,gets()常与puts()配对使用,puts()会在字符串末尾添加换行;
fgets()与fputs()配对使用,fputs()不会添加换行;
fgets()
的第三个参数表示读入的文件,也可以是键盘输入stdin
;
下面引用一个C Primer Plus中的一个例子加以解释
# include "stdio.h"
# define STRLEN 10
int main()
{
char words[STRLEN];
puts("Enter strings(empty line to quit:)");
while (fgets(words, STRLEN, stdin) != NULL && words[0] != '\n')
{
fputs(words, stdout);
}
puts("Done.");
return 0;
}
这个程序可以读入超过10个字符的字符串:每一次循环读入9个字符以\0
结束,然后再次循环,从剩余的字符中再一次读取9个,直到遇到\n
,因为fputs()
不会添加换行,因此输入的字符串最后在同一行输出。(由于输入时fgets()
在结尾添加了\n
,因此输出所有字符后光标移至下一行开头)
如果不想去掉fgets()
保留的换行符,可以通过以下代码实现,
先遇到换行符,将其替换为
\0
;如果遇到空字符,丢弃剩余字符
# include "stdio.h"
# define STRLEN 10
int main()
{
char words[STRLEN];
int i = 0;
puts("Enter strings(empty line to quit:)");
while (fgets(words, STRLEN, stdin) != NULL && words[0] != '\n')
{
while (words[i] != '\n' && words[i] != '\0')
{
++i;
}
if (words[i] == '\n')
{
words[i] = '\0';
}
else
{
while (getchar() != '\n')
{
continue;
}
}
puts(words);
}
puts("Done.");
return 0;
}
gets_s()
// 声明
char *gets_s(char *str, int n)
与fgets()
相比,gets_s()
只能从标准输入中读取字符,并且读取到换行符会丢弃
如果读取到最大字符数也没有遇到换行,则会返回
NULL
自定义输入函数……
标签:换行符,函数,puts,C语言,char,fgets,words,字符串,gets 来源: https://www.cnblogs.com/Euler-0525/p/16438498.html