getline()上的定界符无法正常工作

时间:2018-08-30 17:27:22

标签: c++ delimiter getline

我有一个简单的代码,可以使用getline()公共函数将用户名作为数组获取。当到达char'$'时,我想停止从用户那里获取输入并转到下一行。但是在到达char'$'(我的定界符)后,它立即忽略了第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;
}

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

它看起来像这样:

#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;
}

答案 2 :(得分:0)

让我猜你的输入看起来像这样:

> ./myProg
Please, enter your name: noob$
lease, enter your favourite movie: Top Gun
noob's favourite movie is 
>

在这里我们看到您输入:noob$<return>,后跟Top Gun<return>

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

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.

要修复此问题,您需要先读出空行。
解决该问题的更好方法是不要求名称以'$'结尾。用户输入通常最好一次一行地完成。当用户点击return时,缓冲区将被刷新,流实际上开始工作。在将该缓冲区刷新到流之前,该程序不执行任何操作(除了等待)(通常在返回时发生,但是如果您键入很多则可能发生)。