其他分享
首页 > 其他分享> > C语言字符串的输入函数

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\)个字符,或者在这之前遇到第一个换行符停止

注:

gets()会丢弃换行符

输出时,gets()常与puts()配对使用,puts()会在字符串末尾添加换行;

fgets()与fputs()配对使用,fputs()不会添加换行;

下面引用一个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