概述
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风格字符串常用输入方式及相关函数解析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复