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

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

一.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

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清隆綾小路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值