字符串输入的2种常用方法详解

字符串输入的2种常用方法详解

  • 一.scanf函数
    • 1.扫描集
    • 2.逆向使用扫描集
  • 二.gets函数

一.scanf函数

int main()
{
	char arr[50] = { 0 };
	scanf("%s", arr);
	printf("%s", arr);
	return 0;
}

这种方法可以输入字符串,但是只能输入一个词,遇到空格就结束了。,空格之后的字符,会留在缓冲区,等待下次读入。
字符串

如果我们要使用scanf函数来输入的话,有没有办法呢?
答案:有的。

1.扫描集

除了转换修饰符 s 以外,也可以使用“扫描集”(scanset)修饰符来读取字符串它由方括号所包含的一串无序字符组成([scanset])。scanf()函数接着读取所有字符,然后将它们存储为一个字符串(带有字符串终止符),直到遇到不匹配扫描集中任一字符时才停止。

int main()
{
	char arr[50] = { 0 };
	scanf("%[123456789]", arr);
	printf("%s", arr);
	return 0;
}

字符串输出

此时我们会发现一个问题,就是扫描集只能识别扫描集里面的字符。
不过没关系,我们只需要改动一点点就行,这样不行的话,我们就反着来。

2.逆向使用扫描集

逆向使用转换扫描集(也就是说,除扫描集中的字符外,其他都符合),做法是在扫描集的左括号后面加上一个插入号(^)。

int main()
{
	char arr[50] = { 0 };
	// \n是按下回车后输入的,[^\n] 的意思是 除了\n之外的字符
	scanf("%[^\n]", arr); //字符串末尾有\0
	printf("%s", arr);
	return 0;
}

扫描集

缓冲区

使用scanf时,最后的\n(按下回车时输入的)会遗留在缓冲区中,如果使用scanf,则需要使用gerchar()将缓冲区的Enter吃掉

二.gets函数

	char arr[50] = { 0 };
	gets(arr);  //末尾有\0
	puts(arr);

gets函数
使用 gets() 时,系统会将最后“敲”(Enter)的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符

总结:
1 .我个人认为使用gets()函数比较方便,同时缓冲区中还不会遗留数据。
2.如果要使用scanf()函数,那么使用逆行扫描集会好很多,同时也需要注意缓冲区中的\n

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年12月8日
下一篇 2023年12月8日

相关推荐