Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 利用投票进行分组投票_C - Fatal编程技术网

C 利用投票进行分组投票

C 利用投票进行分组投票,c,C,如何阻止轮询,使其仅在按下键盘按钮时激活 因为这是无事件的孤独 我已经阅读了所有的手册 while(i<5){ struct pollfd fds[2]; int timeout_msecs = 500; int ret; fds[0].fd=STDIN_FILENO; fds[0].events=POLLIN | POLLWRBAND | POLLHUP; ret = poll(fds, 2, -1); snpr

如何阻止
轮询
,使其仅在按下键盘按钮时激活

因为这是无事件的孤独

我已经阅读了所有的手册

 while(i<5){  
      struct pollfd fds[2];
    int timeout_msecs = 500;
    int ret;
      fds[0].fd=STDIN_FILENO;
      fds[0].events=POLLIN | POLLWRBAND | POLLHUP;

    ret = poll(fds, 2, -1);
    snprintf(buffer, 12,"%d",ret);

    //write_raw(7,i,"z",1);

              if(ret > 0) {
              //  write_raw(3,i,"a",1);

                 if (fds[0].revents & POLLIN) {
                   // write_raw(4,i,"b",1);
        //      write_raw(3,1,buffer,1);

        posx=posx-1;
              write_raw(posy,posx,"_|_",3);

              sleep(5);
              fds[0].events = POLLHUP;
                 }
                  if(fds[0].revents & POLLHUP){

              write_raw(4,i,"a",1);

                 }
              }

             fds[0].events=NULL; 
              i++;
    }
while(i 0){
//写(3,i,“a”,1);
if(fds[0]。revents和POLLIN){
//写出(4,i,“b”,1);
//写_raw(3,1,缓冲区,1);
posx=posx-1;
写原始的(posy,posx,“| | |”,3);
睡眠(5);
fds[0]。事件=POLLHUP;
}
if(fds[0]。revents和POLLHUP){
写出原始的(4,i,“a”,1);
}
}
fds[0]。事件=NULL;
i++;
}

您只有1个要监视事件的文件描述符,但您告诉poll()您有2个。你需要做什么

 ret = poll(fds, 1, -1);
当您可以向stdin写入紧急数据时,获取事件是没有用的(不管这意味着什么,所以

  fds[0].events=POLLIN | POLLHUP;
这毫无意义

 fds[0].events=NULL; 
拆下那条线

您的下一个问题是注册读取事件。但是您从未在stdin上读取任何输入。如果有可用数据,您每次都会收到一个事件,直到您实际读取所有可用数据为止


您的问题指出,您希望获取键盘事件,您可以通过读取数据来获取,但您的代码大多具有对write_raw()的调用函数,听起来像是写入数据而不是读取数据。

请添加一些示例代码来澄清您的问题,因为它是不可理解的stands@Ramj然后您需要调试正在发生的事情。找出poll()返回的内容。找出在
fds[0]中返回的事件.revents
。如果您告诉我们您所做的事情、正在发生的事情以及预期会发生的事情,您也会得到更好的帮助。检查如果
poll()会出现什么错误
返回
-1
将是一个良好的开端。如果您故意不检查错误,那么当您的代码不能按预期工作时,您就没有资格感到惊讶。