一.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() 时,系统会将最后“敲”(Enter)的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符文章来源:https://www.toymoban.com/news/detail-443055.html
总结:
1 .我个人认为使用gets()函数比较方便,同时缓冲区中还不会遗留数据。
2.如果要使用scanf()函数,那么使用逆行扫描集会好很多,同时也需要注意缓冲区中的\n文章来源地址https://www.toymoban.com/news/detail-443055.html
到了这里,关于字符串输入的2种常用方法详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!