为了账号安全,请及时绑定邮箱和手机立即绑定

从标准输入中捕获字符,而无需等待按下Enter

从标准输入中捕获字符,而无需等待按下Enter

慕斯709654 2019-06-03 13:35:50
从标准输入中捕获字符,而无需等待按下Enter给定JS对象var obj = { a: { b: '1', c: '2' } }`和一根绳子"a.b"如何将字符串转换为点表示法,这样我就可以var val = obj.a.b如果字符串只是‘a’,我可以用obj[a]但这更复杂。我想有一些直截了当的方法,但目前它逃脱了。
查看完整描述

3 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

在Linux(和其他类似Unix的系统)上,这可以通过以下方式完成:

#include <unistd.h>#include <termios.h>char getch() {
        char buf = 0;
        struct termios old = {0};
        if (tcgetattr(0, &old) < 0)
                perror("tcsetattr()");
        old.c_lflag &= ~ICANON;
        old.c_lflag &= ~ECHO;
        old.c_cc[VMIN] = 1;
        old.c_cc[VTIME] = 0;
        if (tcsetattr(0, TCSANOW, &old) < 0)
                perror("tcsetattr ICANON");
        if (read(0, &buf, 1) < 0)
                perror ("read()");
        old.c_lflag |= ICANON;
        old.c_lflag |= ECHO;
        if (tcsetattr(0, TCSADRAIN, &old) < 0)
                perror ("tcsetattr ~ICANON");
        return (buf);}

基本上,您必须关闭规范模式(和回波模式,以抑制回波)。


查看完整回答
反对 回复 2019-06-03
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

我对它做了一些修改。效果很好。我正在运行OSX,所以如果您运行的是Microsoft,那么您需要找到正确的system()命令才能切换到原始模式和熟模式。

#include <iostream> #include <stdio.h>  using namespace std;  int main() { 
  // Output prompt 
  cout << "Press any key to continue..." << endl; 

  // Set terminal to raw mode 
  system("stty raw"); 

  // Wait for single character 
  char input = getchar(); 

  // Echo input:
  cout << "--" << input << "--";

  // Reset terminal to normal "cooked" mode 
  system("stty cooked"); 

  // And we're out of here 
  return 0; }


查看完整回答
反对 回复 2019-06-03
  • 3 回答
  • 0 关注
  • 517 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信