C++ getline()上的分隔符工作不正常
我有一个简单的代码,它使用getline()公共函数以数组的形式获取用户名。当它到达字符“$”时,我想停止从用户获取输入并转到下一行。但在到达字符“$”(我的分隔符)后,它立即忽略第5行并运行第6行,我不知道为什么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:
#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
中,以便将该行拆分为多个部分。