Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ getline如何与cin一起工作?_C++_Input_Stream - Fatal编程技术网

C++ getline如何与cin一起工作?

C++ getline如何与cin一起工作?,c++,input,stream,C++,Input,Stream,我觉得有很多类似的问题,所以如果这是重复的话,我真的很抱歉。不过,我找不到这个具体问题的答案 我很困惑当cin被传递给它时getline是如何工作的,因为我的理解是每次调用它时它都应该调用cin。当使用我正在阅读的一本书中的代码时,getline被调用了好几次,但只发送了一个输入。cin对象不会从任何地方调用,除非在这些getline调用中 这是怎么回事?当到达getline时,程序是否只是停止运行并等待输入流传递包含所需分隔符的值?如果是这种情况,那么后续的getline调用是否不必等待,因为

我觉得有很多类似的问题,所以如果这是重复的话,我真的很抱歉。不过,我找不到这个具体问题的答案

我很困惑当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”);

cout
getline
根本不“调用”
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,我想这也是问题的意思。那么,如果到达该行时输入分隔符不包含分隔符,整个程序将冻结,只有在从流接收到正确的输入后才能继续?很酷,谢谢您的帮助!我最初接受了本杰明·林德利的答案,但我收回了它(对不起本杰明),因为我看到了你的答案