C++ getline()上的分隔符工作不正常

C++ getline()上的分隔符工作不正常,c++,delimiter,getline,C++,Delimiter,Getline,我有一个简单的代码,它使用getline()公共函数以数组的形式获取用户名。当它到达字符“$”时,我想停止从用户获取输入并转到下一行。但在到达字符“$”(我的分隔符)后,它立即忽略第5行并运行第6行,我不知道为什么 #include <iostream> // std::cin, std::cout int main () { char name[256], title[256]; std::cout << "Please, enter your name:

我有一个简单的代码,它使用getline()公共函数以数组的形式获取用户名。当它到达字符“$”时,我想停止从用户获取输入并转到下一行。但在到达字符“$”(我的分隔符)后,它立即忽略第5行并运行第6行,我不知道为什么

#include <iostream>     // std::cin, std::cout

int main () {

char name[256], title[256];
std::cout << "Please, enter your name: ";
std::cin.getline (name,256,'$');                         //Line 3
std::cout << "Please, enter your favourite movie: ";
std::cin.getline (title,256);                            // Line 5
std::cout << name << "'s favourite movie is " << title;  // Line 6
return 0;
}
#包括//std::cin、std::cout
int main(){
字符名[256],标题[256];

std::cout您可以使用以下解决方案来解决您的问题:

.....getline(title,256,'$')
//                      ^
//                      |
// this is where the delimiter goes in your function call

它似乎是这样工作的:

#include <iostream>     // std::cin, std::cout

int main () {

char name[256], title[256], endOfLine[2];
std::cout << "Please, enter your name: ";
std::cin.getline (name,256,'$');                         //Line 3
std::cin.getline(endOfLine, 1);
std::cout << "Please, enter your favourite movie: ";
std::cin.getline (title,256);                            // Line 5
std::cout << name << "'s favourite movie is " << title;  // Line 6
return 0;
}
> ./myProg
Please, enter your name: noob$
lease, enter your favourite movie: Top Gun
noob's favourite movie is 
>
#包括//std::cin、std::cout
int main(){
字符名称[256]、标题[256]、endOfLine[2];

std::cout让我猜您的输入是这样的:

#include <iostream>     // std::cin, std::cout

int main () {

char name[256], title[256], endOfLine[2];
std::cout << "Please, enter your name: ";
std::cin.getline (name,256,'$');                         //Line 3
std::cin.getline(endOfLine, 1);
std::cout << "Please, enter your favourite movie: ";
std::cin.getline (title,256);                            // Line 5
std::cout << name << "'s favourite movie is " << title;  // Line 6
return 0;
}
> ./myProg
Please, enter your name: noob$
lease, enter your favourite movie: Top Gun
noob's favourite movie is 
>
这里我们看到您输入了:
noob$
,后面是
Top Gun

问题是计算机看到的输入是:

noob$\nTop Gun\n
好的,那么代码中发生了什么呢

std::cin.getline (name,256,'$');  // This reads upto the '$' and throws it away.
因此,您的输入流现在看起来像:

\nTop Gun\n
请注意流前面的“\n”。
现在,您的下一行是:

std::cin.getline (title,256);  // This reads the next line.
                               // But the next line ends at the next new line
                               // which is the next character on the input stream.
                               // So title will be empty.
要修复它,您需要读取该空行。

更好的修复方法是不要求名称以
'$'
结尾。用户输入通常最好一行一行完成。当用户点击
返回时,缓冲区被刷新,流实际开始工作。在缓冲区被刷新到流之前,程序不做任何事情(除了等待)(这通常是在返回时发生的,但如果您只是大量键入,则可能发生)

你给程序的输入是什么?你得到的输出是什么?你期望的输出是什么?还有一些时间,也就是说,对于你的问题,除了Ne换行之外,它不处理终结符。考虑使用和代替。当你看到<代码> $< /代码> C时,你如何期望计算机读取你的思想并停止读取输入?字符?在代码中从未指定过任何类型的分隔符。“忽略第5行并运行第6行”如果你要引用行号,请给你的行编号。@Someprogrammerdude--
basic\u istream::getline
有两个重载。一个不带分隔符,另一个带。是的,你是对的。但是当我把它添加到getline(名称,256)时,它忽略了第5行,当我在屏幕上打印时标题变量将为空。是的,输入名称不需要以“$”结尾,但我试图学习如何使用该函数。最后,我复制了第5行,这意味着我在代码中写了两次第5行。你真的帮了大忙。祝你一切顺利。我推荐你使用
std::getline(,)
读取所有用户输入。将行放入字符串后,解析字符串以获取所需信息。可以搜索该行,也可以将该行放入
std::stringstream
中,以便将该行拆分为多个部分。