【发布时间】:2014-03-06 10:34:32
【问题描述】:
我觉得有很多类似的问题,所以如果这是重复的,我真的很抱歉。不过,我找不到这个特定问题的答案。
我对将 cin 传递给 getline 时的工作方式感到困惑,因为我的理解是它应该在每次调用时调用 cin。但是,在使用我正在阅读的书中的代码时,getline 被调用了几次,但只发送了一个输入。除了这些 getline 调用之外,不会从任何地方调用 cin 对象。
这里发生了什么?当到达 getline 时,程序是否只是停止在其轨道上并等待输入流传递一个包含所需分隔符的值?如果是这种情况,后续的 getline 调用是否不必等待,因为输入流已经包含包含它们各自分隔符的数据?我进行了一些测试,结果表明可能是这种情况。
代码如下:
string firstName;
getline(cin,firstName,',');
string lastName;
getline(cin,lastName,',');
string job;
getline(cin,job,'\n');
cout<<firstName<<" "<<lastName<<" is a "<<job<<endl;;
再次抱歉,如果这是一个愚蠢的问题,但我环顾四周,真的找不到答案。提前感谢您提供的任何帮助!
澄清:
此代码为控制台输入“First,Last,Job\n”输出“First Last is a Job”
【问题讨论】:
-
每一个都提取到包括分隔符在内的所有内容,因此它不可能在下一次调用时仍然存在。
-
@chris 除非有多个分隔符,否则它会停在第一个分隔符处。
-
@JS 你说“只发送一个输入”是什么意思?
-
@ooga 我在帖子末尾澄清了。
-
@ooga,没错,我想总是可以输入多余的内容:P 我想这也是问题所在。