如何在不需要 ENTER 的情况下接收键输入? [复制]

Posted

技术标签:

【中文标题】如何在不需要 ENTER 的情况下接收键输入? [复制]【英文标题】:How to receive key input without requiring ENTER? [duplicate] 【发布时间】:2014-06-04 20:36:36 【问题描述】:
i=0;
while(i<=20)

    nullchoice:
    system("CLS");
    //Advanced Information
    cout << "Your Statistics: " << endl;
    cout << endl << endl;
    cout << "   1  Strength: " << str << endl;
    cout << endl;
    cout << "   2  Vitality: " << vit << endl;
    cout << endl;
    cout << "   3  Agility: " << agi << endl;
    cout << endl;
    cout << "   4  Thaumaturgy: " << tha << endl;
    cout << endl << endl;
    cout << "Points Remaining: " << lvlskills << endl;
    cout << endl;
    cout << "Enter the number of the skill you wish to increase: ";

    //Applying points to skill attributes

    if(i<=19)
    
          cin >> input;

          if(input==1)
                str+=1;
          else if(input==2)
               vit+=1;
          else if(input==3)
               agi+=1;
          else if(input==4)
               tha+=1;
          else
               goto nullchoice;

         lvlskills-=1; 
        
    i++;
    cout << endl << endl;                     

所以本质上,我正在用 C++ 创建一个游戏,一个基于文本的 RPG。这是相当基本的,具有您可能期望从此类游戏中获得的统计数据(力量、活力等)。一开始,如此处所示,玩家可以将一些点数分配给他们选择的技能。

这就是问题所在。现在,玩家必须输入一个数字(1、2、3 或 4。如果不是这些数字,它将进入空选项),然后按 ENTER。让播放器这样做很笨拙,而且完全是错误的,所以有什么简单的方法可以让我编写代码,让他们必须按下数字?

我想我会在接下来的比赛中大量使用它。感谢阅读!

【问题讨论】:

一个相当便携的解决方案是使用 Curses 库。 你想要这个用于什么操作系统? 这适用于 Microsoft Windows 不,这不是重复的线程。其他内容涵盖如何接收按钮输入(getch、cin.get、pause >> nul 等)。所以如果我按“S”它会继续前进,如果我按“R”它会做同样的事情。我需要的是一个条件语句,以便程序可以区分“R”和“S”。 其他问题的答案解决了您的键盘输入问题。您还必须使用自己的大脑,以按照您需要的方式使用收集到的输入。 【参考方案1】:

您只需要存储输入并将其与所需的情况进行比较。考虑一下...

do

    system("CLS");
    //Advanced Information
    cout << "Your Statistics: " << endl;
    cout << endl << endl;
    cout << "   1  Strength: " << str << endl;
    cout << endl;
    cout << "   2  Vitality: " << vit << endl;
    cout << endl;
    cout << "   3  Agility: " << agi << endl;
    cout << endl;
    cout << "   4  Thaumaturgy: " << tha << endl;
    cout << endl << endl;
    cout << "Points Remaining: " << lvlskills << endl;
    cout << endl;
    cout << "Enter the number of the skill you wish to increase: ";

    //Applying points to skill attributes
          char input;
          switch(input=getch())
              case '1':
                str+=1;
                lvlskills-=1;
                break;
          case '2':
               vit+=1;
               lvlskills-=1;
               break;
          case '3':
               agi+=1;
               lvlskills-=1;
               break;
          case '4':
               tha+=1;
               lvlskills-=1;
          
    cout << endl << endl;                     
 while(lvlskills>0);

避免在您的代码中使用goto,而您可以通过其他选项来解决它。这是一个很好的做法..

【讨论】:

这仍然需要用户回车。 不..它没有..它已经过测试... 像魅力一样工作。我现在明白这是如何工作的。谢谢!

以上是关于如何在不需要 ENTER 的情况下接收键输入? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不按 Enter C# WPF 的情况下检测我的键盘

2048年的C,移动问题[重复]

Django:如何在不刷新页面的情况下更新图像?

组合键与 ENTER 键

ckeditor - 在源模式下禁用ENTER键

WPF:如何在不禁用箭头键导航的情况下禁用选项卡导航?