我有一个简单的代码,可以使用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;
}
答案 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
时,缓冲区将被刷新,流实际上开始工作。在将该缓冲区刷新到流之前,该程序不执行任何操作(除了等待)(通常在返回时发生,但是如果您键入很多则可能发生)。