zoukankan      html  css  js  c++  java
  • Understanding Unix/Linux Programming-用户程序:play_again1

     1 /* play_again1.c
     2  * purpuse: ask if user wants another play 
     3  * better : instant response without echo
     4  * returns: 0 -> yes , 1 -> no 
     5  */
     6  
     7  #include <stdio.h>
     8  #include <stdlib.h>
     9  #include <termios.h>
    10  
    11  #define QUESTION "Do you want another play?"
    12  
    13  int get_response(char *);
    14  void set_crmode(void);
    15  void tty_mode(int); 
    16  
    17  int main()
    18  {
    19      int response ;
    20      tty_mode(0);   // save tty mode
    21      set_crmode();
    22      response = get_response(QUESTION);
    23      tty_mode(1);   // restore tty mode
    24      return response ;
    25  }
    26  
    27  int get_response(char * qiz)
    28  {
    29      int input ;
    30      printf("%s(y/n)" , qiz);
    31      while(1)
    32      {
    33          switch(input = getchar())
    34          {
    35              case 'y':
    36              case 'Y': 
    37                 printf("
    ");
    38                 return 0 ;
    39              case 'n': 
    40              case 'N': 
    41              case EOF: 
    42                 printf("
    ");
    43                 return 1 ;
    44              default : 
    45                 printf("
    Cannot understand %c" , input );
    46                 printf("Please type y or no 
    ");        
    47          }
    48      }
    49  }
    50  
    51 void set_crmode(void)
    52 {
    53     struct  termios ttystate ;
    54     tcgetattr(0 , &ttystate);
    55     ttystate.c_lflag &= ~ICANON ;   // No Buffering
    56     ttystate.c_cc[VMIN] = 1 ;   //Get one char one time 
    57     tcsetattr( 0 , TCSANOW , &ttystate);    
    58 }
    59 
    60 void tty_mode(int mode)
    61 {
    62     static struct termios original_mode ;// 设置静态结构体变量
    63     if(mode == 0 )
    64     {
    65         tcgetattr( 0 , & original_mode);// 存储原有设置
    66     }
    67     else
    68     {
    69         //还原原有设置
    70         if( tcsetattr(0 , TCSANOW , & original_mode) == -1 )
    71         {
    72             perror("Restore tty settings failed!
    ");
    73         }
    74     }
    75 }
  • 相关阅读:
    grid layout
    flex box布局
    box-shadow
    text-shadow
    border-radius
    manjaro conky配置
    博客园样式设置
    python排序参数key以及lambda函数
    python-批量解压zip、rar文件
    Python
  • 原文地址:https://www.cnblogs.com/NJdonghao/p/5286504.html
Copyright © 2011-2022 走看看