LINUX.ORG.RU

[C] Параметры, Case


0

1

Переписываю tabler на Си, попутно изучаю язык. Делаю по ману: http://www.firststeps.ru/linux/r.php?10

Матерится, мол, нельзя в case что-то кроме int совать.

Если нельзя, то как сделать проверку параметров?

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

#define DEF_OPT_NO_PARAMS -1

#define DEF_NO_PARAMS 1
#define DEF_HELP      2
#define DEF_GOOD      3

int draw_help(void)
{
 printf("┏━━━━━━━━━━━━━━━━━┓\n");
 printf("┃     TABLER      ┠───────────────────────────────────────┐\n");
 printf("┗━━┯━━━━━━━━━━━━━━┛     AVAILABLE PARAMETERS:             │\n");
 printf("   │ -h      : This message.                              │\n");
 printf("   │ -s=cxr  : Set number of cols (c) and rows (r).       │\n");
 printf("   │ -f=cxr  : Set number of fixed cols (c) and rows (r). │\n");
 printf("   │ -c=wxh  : Set cell size: width (w) and height (h).   │\n");
 printf("   │ -d=y/n  : Use double fixed cell style?               │\n");
 printf("   └──────────────────────────────────────────────────────┘\n");
 return 0;
}

int check_parameters(int argc, char *argv[])
{
 int result = 0;
 
 opterr = 0;
 while ((result = getopt(argc, argv, "hs:f:c:d:")) != DEF_OPT_NO_PARAMS)
 {
  switch (result)
  {
   case "h" : printf("help param found");                       break;
   case "s" : printf("size param found %s", optarg);            break;
   case "f" : printf("fixed param found %s", optarg);           break;
   case "c" : printf("cell param found %s", optarg);            break;
   case "d" : printf("double param found %s", optarg);          break;
   case "?" : printf("WARNING, unknown parameter: %i", result);
  }
 }
 
 return DEF_NO_PARAMS;
}

int draw_table(void)
{
 return 0;
}

int main(int argc, char *argv[])
{
 switch (check_parameters(argc, argv))
 {
  case DEF_NO_PARAMS : draw_help();  break;
  case DEF_HELP      : draw_help();  break;
  case DEF_GOOD      : draw_table();
 }
 return 0;
}

case «h»

«h» — это строка, а 'h' — это символ. Подозреваю, что в int result хранится таки char, а не const void *, тем более, что его возвращает getopt().

gentoo_root ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.