检测在C ++中按Enter键

时间:2014-10-12 13:59:31

标签: c++ boolean cin

如何让我的代码检测到我按下回车键?我尝试使用cin.get()但没有成功。此外,当按下回车键时,我想将布尔值x从true更改为false。

为什么这不起作用?

if (cin.get() == '\n'){
x = false;
}

当按下回车键时我想结束我的循环(以及程序)(参见下面的代码)

所有代码(简单的摇滚,纸张,剪刀游戏):

#include <iostream>
#include <string>
#include <cstdlib> //random
#include <time.h> //pc time

using namespace std;

int main()
{

    string rpsYou;
    string rpsCom;
    string winner;
    bool status = true;

while (status){
    cout << "Welcome to Rock, Scissors, Paper!\nYou'll have to compete against the computer."
            " Please enter 'Rock', 'Paper' or 'Scissors' here: ";
    cin >> rpsYou;

    //Random number
    srand (time(NULL));
int randomNum = rand() % 4; //  -> (rand()%(max-min))+min;

//Computers guess
if (randomNum ==1){
    rpsCom = "Rock";
}
else if (randomNum ==2){
    rpsCom = "Paper";
}
else {
    rpsCom = "Scissors";
}

//First letter to capital
rpsYou[0] = toupper(rpsYou[0]);

if (rpsYou == "Rock" || rpsYou == "Paper" || rpsYou == "Scissors"){

    cout << "You: " << rpsYou << "\nComputer: " << rpsCom << "\n";

}
else {
    cout << "ERROR: Please enter 'Rock', 'Paper' or 'Scissors'.";
}


if ( (rpsYou == "Rock" && rpsCom == "Rock") ||
     (rpsYou == "Paper" && rpsCom == "Paper") ||
     (rpsYou == "Scissors" && rpsCom == "Scissors") ){

    cout << "Tie :|";

}
else if( (rpsYou =="Rock" && rpsCom =="Scissors") ||
         (rpsYou =="Paper" && rpsCom =="Rock") ||
         (rpsYou =="Scissors" && rpsCom =="Paper")){
    cout << "Congratulations! You won! :)";
}

else{
    cout << "Oh no! You lost! :(";
}

}

    return 0;
}

3 个答案:

答案 0 :(得分:2)

你可以这样做:

cout << "Hit enter to stop: ";
getline(cin, rpsYou);
if (input == "") {
    status=false;
}

这假设用户输入中没有任何内容,(即:用户只需按下回车键)

答案 1 :(得分:0)

听起来你正在考虑“实时”获取按键,例如在游戏中可能有用。但是cin并不像那样。在标准C ++中无法“检测用户何时按下输入”!因此,当用户按下回车键时,您无法结束该程序。你可以做的是当用户输入空行时,或者当用户输入例如“退出”(或者其他任何东西,直到你)时结束程序,但每个用户输入必须以Enter键结束。

cin读取就像从文本文件中读取一样,除非每次用户按Enter键时此文本文件都会获得一个新行。因此,检测用户按Enter的最接近的是使用std::getline

std::string line
std::getline(std::cin, line);

这将从 stdin 中获取所有字符,直到换行符(或直到文件结尾),这通常意味着用户在控制台应用程序中使用了该键时输入。请注意,实际的行尾不会存储在字符串中,因此如果用户只需按Enter而不键入任何其他内容,line将为空字符串。


在编辑后查看问题,您可以将cin >> rpsYou;替换为getline(cin, rpsYou);。您可能还想添加trimming您读取的字符串,以防用户输入例如类型的额外空格。

答案 2 :(得分:0)

您无法检测标准C ++中按下了哪个键。它取决于平台。这是一个类似的question,可能对您有帮助。