控制台菜单

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

//定义menu
char *menu[]=
{
  "a ----",
  "b ----",
  "c ----",
  NULL,
};
int getchoice(char *greet,char *choices[],FILE *in,FILE *out);

int main()
{
  int choice=0;
  //获取tty,该设备始终指向当前终端
  FILE *input=fopen("/dev/tty","r");
  FILE *output=fopen("/dev/tty","w");
  //判断用户是否重定向标准输出
  if(!isatty(fileno(stdout)))
  {
    fprintf(stderr,"you are not a terminal!\n");
  }

  while(1)
  {
    choice = getchoice("please select an option",menu,input,output);
    printf("you have chosen: %c\n",choice);
    // handle choice
    if(choice == 'a')
    {
      printf("111 \n");
    }
    else if(choice == 'b')
    {
      printf("222 \n");
    }
    else if(choice == 'c')
    {
      printf("333 \n");
    }
  }

//  do
//  {
//    choice = getchoice("please select an action",menu,input,output);
//    printf("you have chosen: %c\n",choice);
//    if(choice == 'a')
//    {
//      //printf("111 \n");
//    }
//  }while(choice != 'q');

  exit(0);
}

int getchoice(char *greet,char *choices[],FILE *in,FILE *out)
{
  int chosen = 0;
  int selected;
  char **option;
  do
  {
    printf("\n------------------------------\n");
    printf("choice: %s\n",greet);
    option = choices;
    while(*option)
    {
      fprintf(out,"%s\n",*option);
      option++;
    }
    printf("------------------------------\n\n");

    do
    {
      selected = fgetc(in);
      option = choices;
    }while(selected == '\n');

    while(*option)
    {
      if(selected == *option[0])
      {
        chosen = 1;
        break;
      }
      option++;
    }

    if(!chosen)
    {
      fprintf(out,"incorrect choice,select again\n--------------------\n");
    }
  }while(!chosen);

  return selected;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值