我有一个非常奇怪的问题。这是我的代码:
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string user_name;
cout << "what is your name?" << endl;
getline(cin, user_name, '\n');
cout << "hello, " << user_name << ", how are you today?" << endl;
}
当我完全按Enter键时,此代码不会结束;因此无法完成输入。输出将像这样停止并等待:
你的名字是什么?但是,如果我将'\ n'更改为'p'或任何char,它将在输入特定字符时完成输入。例如:
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string user_name;
cout << "what is your name?" << endl;
getline(cin, user_name, '\p');
cout << "hello, " << user_name << ", how are you today?" << endl;
}
屏幕:
你的名字是什么? 你好,弗兰克,你今天过得怎么样?RUN SUCCESSFUL(总时间:2s)
PS: 我使用的是NetBeans IDE 8.0和Windows 8 Pro x64
答案 0 :(得分:0)
新行字符取决于操作系统。
我会将getline调用的第三个参数全部放在一起。这将使用getline的默认行为并终止对回车键的读取。
编辑:阅读后你仍然遇到问题,我决定对你的代码进行一些测试。
首先,确认默认行为没有指定getline方法的第三个参数。
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
while(true){
string user_name;
cout << "what is your name?" << endl;
getline(cin, user_name);
cout << "hello, " << user_name << ", how are you today?" << endl;
}
}
输出:
what is your name?
WhiteboardDev
hello, WhiteboardDev, how are you today?
what is your name?
WhiteboardDev
hello, WhiteboardDev, how are you today?
what is your name?
WhiteboardDev
hello, WhiteboardDev, how are you today?
what is your name?
其次,为了测试手动指定转义序列'\ n',我做了这个:
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
while(true){
string user_name;
cout << "what is your name?" << endl;
getline(cin, user_name, '\n');
cout << "hello, " << user_name << ", how are you today?" << endl;
}
}
输出:
what is your name?
WhiteboardDev
hello, WhiteboardDev, how are you today?
what is your name?
WhiteBoardDev
hello, WhiteBoardDev, how are you today?
what is your name?
WhiteboardDev
hello, WhiteboardDev, how are you today?
what is your name?
在g ++ w / osx上编译,所以我没有打扰测试'\ r \ n'的情况。这为跨平台兼容性提出了一个很好的观点。如果您希望您的代码在多个环境中工作,请尝试不在代码中指定任何特定于平台的内容(也就是EOL序列),并完全省略第三个参数。
答案 1 :(得分:0)
现在我在WhiteboardDev的帮助下解决了我的问题。在我的编码环境中,我应该使用&#39; \ r&#39;在输入过程中,我需要按下Enter和Space,两个键才能完成它。