C++ getline如何与cin一起工作?
我觉得有很多类似的问题,所以如果这是重复的话,我真的很抱歉。不过,我找不到这个具体问题的答案 我很困惑当cin被传递给它时getline是如何工作的,因为我的理解是每次调用它时它都应该调用cin。当使用我正在阅读的一本书中的代码时,getline被调用了好几次,但只发送了一个输入。cin对象不会从任何地方调用,除非在这些getline调用中 这是怎么回事?当到达getline时,程序是否只是停止运行并等待输入流传递包含所需分隔符的值?如果是这种情况,那么后续的getline调用是否不必等待,因为输入流已经有了包含各自分隔符的数据?我做了一些测试,结果表明可能是这样 代码如下:C++ getline如何与cin一起工作?,c++,input,stream,C++,Input,Stream,我觉得有很多类似的问题,所以如果这是重复的话,我真的很抱歉。不过,我找不到这个具体问题的答案 我很困惑当cin被传递给它时getline是如何工作的,因为我的理解是每次调用它时它都应该调用cin。当使用我正在阅读的一本书中的代码时,getline被调用了好几次,但只发送了一个输入。cin对象不会从任何地方调用,除非在这些getline调用中 这是怎么回事?当到达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;;
stringfirstname;
getline(cin,名字,,);
字符串lastName;
getline(cin,lastName,,);
字符串作业;
getline(cin,作业“\n”);
coutgetline
根本不“调用”cin
<代码>cin
是一个对象。对象包含数据。cin
中的数据是输入函数读取标准输入流所需的信息。例如,如果您想从文件中读取,您应该打开文件并将文件对象传递给getline
调用
getline
时,程序读取输入缓冲区中的任何内容。如果输入缓冲区已经包含分隔符,则getline
将立即返回。否则它将等待。getline
根本不“调用”cin
<代码>cin是一个对象。对象包含数据。cin
中的数据是输入函数读取标准输入流所需的信息。例如,如果您想从文件中读取,您应该打开文件并将文件对象传递给getline
调用
getline
时,程序读取输入缓冲区中的任何内容。如果输入缓冲区已经包含分隔符,则getline
将立即返回。否则它将等待。使用cin调用函数实际上不是请求用户输入(至少不是直接请求)。它是对标准输入字符的请求。在正常程序操作中(标准输入不是从文件或其他源定向的),标准输入存储在缓冲区中。如果标准输入缓冲区为空,并且cin
请求更多字符,则系统将通过终端请求用户输入。(即键盘)。终端请求的输入通常是面向行的。也就是说,它等待您按Enter键,然后发送所有要存储在标准输入缓冲区中的数据。如果cin
在输入缓冲区为空之前获取了所需的所有字符,则这些字符将保留到下一个请求
例如,当你打这个电话时:
getline(cin,firstName,',');
输入缓冲区是空的,假设用户输入:
Benjamin,Lindley,软件开发者
首先,以下字符串存储在输入缓冲区中:
"Benjamin, Lindley, Software Developer\n"
然后,getline
导致从输入缓冲区读取“Benjamin”
(但丢弃逗号)
保留在缓冲区中,以备将来使用
cin
进行任何操作使用cin
调用函数实际上不是请求用户输入(至少不是直接)。它是对标准输入字符的请求。在正常程序操作中(标准输入不是从文件或其他源定向的),标准输入存储在缓冲区中。如果标准输入缓冲区为空,并且cin
请求更多字符,则系统将通过终端请求用户输入。(即键盘)。终端请求的输入通常是面向行的。也就是说,它等待您按Enter键,然后发送所有要存储在标准输入缓冲区中的数据。如果cin
在输入缓冲区为空之前获取了所需的所有字符,则这些字符将保留到下一个请求
例如,当你打这个电话时:
getline(cin,firstName,',');
输入缓冲区是空的,假设用户输入:
Benjamin,Lindley,软件开发者
首先,以下字符串存储在输入缓冲区中:
"Benjamin, Lindley, Software Developer\n"
然后,getline
导致从输入缓冲区读取“Benjamin”
(但丢弃逗号)
保留在缓冲区中,以备将来使用
cin
执行任何操作时使用。@chris除非有多个分隔符,因为它在第一个分隔符处停止。@JS您说“只发送一个输入”是什么意思?@ooga我在文章末尾澄清了。@ooga,是的,我想总是可以输入超出需要的:P,我想这也是问题的意思。每个人都提取了所有内容,包括分隔符,所以下一次调用时它不可能仍然存在。@chris,除非有多个分隔符,因为它停在第一个位置。@JS你说“只发送一个输入”是什么意思?@ooga我在文章的结尾澄清了。@ooga,是的,我想总是可以输入更多不必要的内容:P,我想这也是问题的意思。那么,如果到达该行时输入分隔符不包含分隔符,整个程序将冻结,只有在从流接收到正确的输入后才能继续?很酷,谢谢您的帮助!我最初接受了本杰明·林德利的答案,但我收回了它(对不起本杰明),因为我看到了你的答案