linux环境下无阻塞键盘输入以及MAP容器中value为数组的一些问题

一、使用ncurses实现键盘无阻塞输入的问题
先看代码:

#include "ncurses.h"
#include <fcntl.h>

int main(int argc, char **argv)
{
  int key;
  initscr();
  crmode();
  keypad(stdscr,TRUE);
  noecho();
  fcntl(0,F_SETFL, O_NONBLOCK);//加这句才能实现非阻塞
  clear();
  refresh();
  while (1)
  {
     key = getch();
     switch(key)
      {
      case 'w': 
          break;
      case KEY_UP:
          break;
      default:
          break;

     }
  }
  endwin();
  return 0;
}

如果没有加fcntl(0,F_SETFL, O_NONBLOCK)函数,程序会 key = getch()处等待用户输入(不用回车)而不是继续往下执行。

二、使用数组作为map容器中value的值

int arr[18][4] = {
    {1,0,0,0},
    {1,0,0,-1},
    {0,0,0,1},
    {0,0,0,-1},
    {1,0,0,1},
    {-1,0,0,0},
    {-1,0,0,1},
    {-1,0,0,-1},
    {1,-1,0,0},
    {1,0,0,0},
    {0,1,0,0},
    {0,-1,0,0},
    {1,1,0,0},
    {-1,0,0,0},
    {-1,-1,0,0},
    {-1,1,0,0},
    {0,0,1,0},
    {0,0,-1,0}
                 } ;

char arrChar[] = {'i','o','j','l','u',',','.','m','O','I','J','L','U','<', '>', 'M', 't', 'b'};   
map<char, int*> n;
n.clear();
for(int i=0;i<18;++i)
  {   //int* a=new int[4];
      //memcpy(&a[0],&arr[i][0],4*sizeof(int));
      //cout << a[0]<< a[1]<< a[2]<< a[3]<<endl;
  n.insert(make_pair(arrChar[i],&(arr[i][0])));
  }

上面的代码实现的是创建MAP容器使arrChar[]的key对应arr数组的每一行。一开始反了一个错误:


  for(int i=0;i<18;++i)
  {   
      int a[4];
      memcpy(&a[0],&arr[i][0],4*sizeof(int));
      n.insert(make_pair(arrChar[i],a));

  }

这样的运行结果是map里所有key对应的值都是0,0,-1,0,将

n.insert(make_pair(arrChar[i],a));改成n.insert(make_pair(arrChar[i],&(arr[i][0])));或者改成n.insert(make_pair(arrChar[i],arr[i]));问题解决。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值