我是靠谱客的博主 成就跳跳糖,最近开发中收集的这篇文章主要介绍string和C风格字符串常用输入方式及相关函数解析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

C风格字符串:

char info[100];
cin >> info;
scanf("%s", info);
cin.getline(info, 100);
cin.get(info, 100);

string:

string stuff;
cin>>stuff;
getline(cin, stuff);
//scanf不能读string

函数解析:

正常读取流程:

cin:对于一次cin调用,在没有读到非空白字符前它会将遇到的所有空白字符丢弃(不会停止读取),在读到非空白字符之后遇到空白字符cin将停止读取,并将该空白字符留在输入队列中(空白字符指isspace()认同的字符)

scanf:与cin相同

含参的cin.get:读取一行,当遇到n时读取停止,但会将n留在输入队列中,所以要注意如果其后有其它读取数据的函数(特别是该函数受到n影响时),要用cin.get或者cin.getline除下n

cin.getline和getline:读取一行,当遇到n时读取停止,且将n从当前输入队列中丢弃,所以可以用来除去输入队列中的n

异常情况:

cin和scanf对于空行会按照正常读取流程处理,对于C风格字符串实际输入字符数大于存储字符串时会出现不确定的情况,要看具体的实现(string不会有超过的情况,因为会自动扩容)

含参的cin.get读取空行后会取消后面的所有输入(通过设置相应的标志位),但可以通过cin.clear取消,即cin.clear后面的输入会再次生效。而在处理输入字符数多指定字符数的情况时只会读取指定的字符数(准确说是指定字符数-1,减去的一个用来放空字符),多余的字符将留在输入队列中供下文的输入读取

两个getline函数对于空行会按照正常流程处理,而在输入字符数多于指定字符数时会取消后面的所有输入,同样也可以用cin.clear取消

补充:

关于cin.clear:用来重置因输入错误而设置的标志位,使接下来的输入有效,注意它并不清除输入列表,想要清除输入列表需用cin.sync方法

cin.getline和getline都有一个可选参数,用于指定使用哪个字符来确定输入的边界:

cin.getline(info,100,':'); //使用:替代默认的n
getline(stuff,':'); //使用:替代默认的n

最后

以上就是成就跳跳糖为你收集整理的string和C风格字符串常用输入方式及相关函数解析的全部内容,希望文章能够帮你解决string和C风格字符串常用输入方式及相关函数解析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部