欢迎光临散文网 会员登陆 & 注册

与string类有关的cin&getline(cin,string)输入输出实例分析与反思

2023-03-25 21:52 作者:墨客本人  | 我要投稿

前言:

主要是写代码的时候有几个不清楚的地方,一个一个试了一下,并用文字分析了下(脑袋有点晕,写出来不容易出错)。又截了图,那就顺便发出来了吧hhhh。

正文:

本文的行文逻辑就是分析代码(using example),搞懂输入和输出是怎么对应上的,最后给出防止问题产生的方法和知识点总结。

example1(本文用 ’*代替空格,便于辨认)

code1.输入:123*sd\n

注意cin、getline的顺序。

example2

code2.输入:123*ad\nasd\n

code1和2只有cin和getline的顺序变动了一下,结果也很好理解。(不解释啦)

然后问题其实和下面的几个代码有关。

example3(和example的code一样,但输入不同)

code1.输入:12\n

是的没错,你敲完\n(也就是回车),程序就结束了。

!!!也就是说先用cin再用getline会出现问题。

解释:cin遇到空格或\n结束会语句,同样的,getline遇到\n会结束语句。

流程:输入12\n后,cin读取12,cin读取\n,cin停止(\n并没有消失)。getline读取\n,getline停止。

为了防止example3这种情况的出现,我们需要加一行getchar();具体见下文代码。

example4

code.3输入:123\nabc\n

很正常吧?输入完123回车,在输入abc。输出也很normal。

解释:

输入完123后,理所当然的想用回车来结束输入,于是cin结束了(\n仍然存在),紧接着getchar读取了\n(\n消失了!),然后getline并没有看到\n于是读取了abc。

example5(code3,输入和example3的输入类似)

code3.输入:123*abc\n

可以和example3不见getchar的代码进行对比,效果拔群!

不论怎么输入都会得到想要的结果。

解释:

当输入完123后输入空格时cin读取到空格结束,同时空格本身不会消失,然后空格被getchar读取,接着到getline读取(读取了abc)。

什么?这些分析和改进有什么dia用?下面是我写题涉及到的部分代码,主要是红框内容。

问题代码
修改:添加getchar();

拿下!!

此图对本文没有任何意义,但让我很爽。

结尾:

稍微总结一下

  1. cin遇到空格或回车结束,会保留遇到的空格或回车

  2. getline(cin,string)遇到回车停止。(人家叫getline,读取一行(line),很合理吧)

  3. getchar()读取一个字符(当然包括空格和\n了)

  4. cin紧接着getline会出bug,两者间需要添加getchar()。


与string类有关的cin&getline(cin,string)输入输出实例分析与反思的评论 (共 条)

分享到微博请遵守国家法律