C   25
digit optind
Guest on 9th March 2023 01:29:25 PM


  1. #include <stdio.h>
  2.  
  3. int
  4. main (argc, argv)
  5.      int argc;
  6.      char **argv;
  7. {
  8.   char c;
  9.   int digit_optind = 0;
  10.  
  11.   while (1)
  12.     {
  13.       int this_option_optind = optind;
  14.       char *name = '\0';
  15.       int option_index = 0;
  16.       static struct option long_options[]
  17.         = {{ "add", 1, 0, 0 },
  18.            { "append", 0, 0, 0 },
  19.            { "delete", 1, 0, 0 },
  20.            { "verbose", 0, 0, 0 },
  21.            { "create", 0, 0, 0 },
  22.            { "file", 1, 0, 0 },
  23.            { 0, 0, 0, 0}};
  24.  
  25.       c = getopt_long (argc, argv, "abc:d:0123456789",
  26.                        long_options, &option_index);
  27.       if (c == EOF)
  28.         break;
  29.         switch (c)
  30.           {
  31.           case 0:
  32.             printf ("option %s", (long_options[option_index]).name);
  33.             if (optarg)
  34.               printf (" with arg %s", optarg);
  35.             printf ("\n");
  36.             break;
  37.  
  38.           case '0':
  39.           case '1':
  40.           case '2':
  41.           case '3':
  42.           case '4':
  43.           case '5':
  44.           case '6':
  45.           case '7':
  46.           case '8':
  47.           case '9':
  48.             if (digit_optind != 0 && digit_optind != this_option_optind)
  49.               printf ("digits occur in two different argv-elements.\n");
  50.             digit_optind = this_option_optind;
  51.             printf ("option %c\n", c);
  52.             break;
  53.  
  54.           case 'a':
  55.             printf ("option a\n");
  56.             break;
  57.  
  58.           case 'b':
  59.             printf ("option b\n");
  60.             break;
  61.  
  62.           case 'c':
  63.             printf ("option c with value `%s'\n", optarg);
  64.             break;
  65.  
  66.           case '?':
  67.             break;
  68.  
  69.           default:
  70.             printf ("?? getopt returned character code 0%o ??\n", c);
  71.           }
  72.     }
  73.  
  74.   if (optind < argc)
  75.     {
  76.       printf ("non-option ARGV-elements: ");
  77.       while (optind < argc)
  78.         printf ("%s ", argv[optind++]);
  79.       printf ("\n");
  80.     }
  81.  
  82.   return 0;
  83. }

Raw Paste

Login or Register to edit or fork this paste. It's free.