sách gpt4 ăn đã đi

c++ - 识别 “Enter”

In lại Tác giả: Walker 123 更新时间:2023-11-30 05:23:01 25 4
mua khóa gpt4 giày nike

我希望我的程序能够识别用户何时按下“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 << "Try again, press enter" << endl;
getline (cin, enter);
}

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

和这个:
string enter;
dice d1;

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

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

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

我知道该字符串会丢掉“\ n”,但无法真正找到一种解决方法。

PS:

我找到了解决方案。但是我仍然觉得应该有一个更好的选择。
        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')
phá vỡ;
}

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

trả về 0;
}

câu trả lời hay nhất

std::getline

在前两种情况下,如果您尝试检测Enter键,则使用getline作为输入有两个问题(尽管您真正检测到的是换行符,而按enter键不是唯一的方法生成,尽管通常是最简单的)。首先,正如您所说,无论getline用作定界符,它都将忽略读取的输入内容,因此,在没有使事情变得更加复杂的情况下,您实际上将无法获得包括在内的换行符。其次,但是,在换行符之前输入的所有字符也将包含在检索到的getline行中,因此仅与字符串"\n"进行比较就不会告诉您是否已读取换行符,即使getline保留分隔符也是如此没错

当然,另一个问题是,理想情况下,您需要检查以确保输入流cin在读取时不处于错误状态。如果不是这种情况,则getline仅在收到输入中的换行符后才能继续。

原则上,这表明(假设您不介意以换行符作为输入输入的非输入键的方式用作输入键),如果您执行正确的错误检查,则完全不需要检查字符串本身就知道按下回车键-如果getline停止阻止输入,并且没有遇到错误(我在流错误状态标志中包括“错误”中的文件结尾),它将读取定界符,您的情况是换行符。因此,您可以利用getline(cin, enter)的阻止行为来控制流程,尽管要退出循环,您仍然需要检查是否输入了换行符(或者是否输入了文件结尾或是否发生了错误) ,方法是检查cin上的状态标志)。

std::istream::get()

cin.get()不同,使用您在第三种情况下使用的getline方法,您实际上可以检索换行符-尽管您提供的代码在第一次循环后每次循环需要两次回车,而不是一次(我怀疑这是您的意图)。不需要单独的条件break情况,循环条件就足够了(在失败情况下,no-args std::istream::get()trở lạiEOF值,该值不等于\N,因此在这种情况下退出循环)。换一种说法,

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

应该提供一个循环迭代后直接进入下一个循环的按回车的行为,而不是需要两次按回车。

您仍然会遇到“输入其他字符然后进入然后退出”的语法,这有点尴尬,但这部分是由于行缓冲输入(例如典型的命令行终端)受到限制的结果。通过上述循环,您还可以通过输入文件结尾的平台组合键来立即退出(无需按回车键)(因变量而异,但在基于UNIX的系统上通常为 CTRL+D),但是如果您想取得更大的进步,这是在命令行环境中进行的常规交互式键盘输入(通过直接按键而不是逐行输入文本来直接进行操作),这比该程序的范围似乎要复杂得多,并且通常需要外部库和/或特定于平台的支持。如果您确实想研究C++的知识,则可以看看 câu hỏi này的一些答案。

换句话说,检测交互式命令行程序的按键通常比 cin.get()有更好的选择,但是如果您要检测输入以外的其他按键并立即做出响应,它们可能会变得更加复杂(如果您想检测按键的输入而不是立即输入)等待另一个进入)。在基本的,与平台无关的C++中,除了 cin.get()getline()之外,还有其他输入处理选项,但是据我所知,它们都会遇到这种问题- cin的输入不会变成事实在输入流中直到行尾都可用-无需进入特定于平台的代码(或包含特定于平台的代码的外部库)来更改该事实或以其他方式解决该问题。

关于c++ - 识别 “Enter”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39386758/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress