C++ 识别;输入“;

C++ 识别;输入“;,c++,xcode,loops,enter,C++,Xcode,Loops,Enter,我希望我的程序能够识别用户何时按下“回车”键并保持循环。但我不知道如何让程序识别“回车”。尝试了两种方法: string enter; string ent = "\n"; dice d1; cout << "To start - Press enter" << endl; getline (cin, enter); while (enter == ent) { d1.throw_dice(); d1.draw_dice(); cout <

我希望我的程序能够识别用户何时按下“回车”键并保持循环。但我不知道如何让程序识别“回车”。尝试了两种方法:

string enter;
string ent = "\n";
dice d1;

cout << "To start - Press enter" << endl;
getline (cin, enter);

while (enter == ent)
{
    d1.throw_dice();
    d1.draw_dice();
    cout << "Try again, press enter" << endl;
    getline (cin, enter);
}

cout << "Thank you for playing"<< endl;
字符串输入;
字符串ent=“\n”;
骰子d1;
cout std::getline
在前两种情况下,如果您试图检测回车键,那么使用
getline
进行输入会出现两个问题(尽管您真正检测到的是换行符,而且回车键不是生成的唯一方法,尽管它通常是最直接的)。首先,正如您所说,无论
getline
使用什么作为分隔符,它都会从它读取的输入中删除,因此如果不让事情变得更复杂,您就无法使用它来获取包含的新行。然而,第二点是,在换行符之前输入的任何字符也将包含在所检索的行
getline
中,因此简单地与字符串
“\n”
进行比较不会告诉您是否读取了换行符,即使是
getline
保留了分隔符,但事实并非如此

当然,另一个问题是,理想情况下,您希望检查以确保输入流
cin
在读取时不处于错误状态。如果情况并非如此,
getline
只应在收到输入中的换行后继续

原则上,这表明(如果您不介意以非回车键的方式提供换行符作为输入,则按回车键)如果执行正确的错误检查,则根本不需要检查字符串本身就知道按下了enter键-如果
getline
停止阻止输入,并且没有遇到错误(我将文件结尾包括在“error”中,因为它在流状态标志中),它将读取分隔符,在你的例子中是换行符。因此,您可以利用
getline(cin,enter)
的阻塞行为来引导控制流,但要退出循环,您仍然需要检查是否输入了换行以外的内容(或者通过检查
cin
上的状态标志来检查是否输入了文件结尾或发生了错误)

std::istream::get() 使用您在第三种情况下使用的
cin.get()
方法,您实际上可以检索换行符,这与
getline
不同-尽管您提供的代码在第一次循环迭代后要求每次按两次enter键,而不是一次(我怀疑这是您的意图)。单独的条件
break
案例应该是不必要的,循环条件应该足够了(在失败案例中,没有args
std::istream::get()
返回
EOF
值,该值不等于
\n
,因此循环在该案例中退出)。换句话说,

while (cin.get() == '\n') {
    d1.throw_dice();
    d1.draw_dice();
    cout << "Try again, press enter! Or press any other key and enter" << endl;
}
while(cin.get()='\n'){
d1.掷骰子();
d1.画骰子();

CUT可能想把问题标记为C++来让合适的人看它。
        while (cin.get() == '\n')
    {
        d1.throw_dice();
        d1.draw_dice();
        cout << "Try again, press enter! Or press any other key and enter" << endl;
        if (cin.get() != '\n')
            break;
    }

    cout << "Thank you for playing"<< endl;

    return 0;
}
while (cin.get() == '\n') {
    d1.throw_dice();
    d1.draw_dice();
    cout << "Try again, press enter! Or press any other key and enter" << endl;
}