Mam za zadanie wczytać dowolną ilość plików za pomocą lini komend. To ma być coś w stylu:

./program -f plik1 plik2 ...(dowolna ilość tych plików) -k katalog1 katalog2....(dowolna ilość tych katalogów)

Udaje mi się wczytać tylko pierwsze argumenty za podanymi opcjami (czyli udaje mi się wczytać tylko plik1, katalog1). Jednak spróbowałem czegoś takiego

while ((c = getopt (argc, argv, "f:k:i:")) != -1)
    switch (c)
      {
      case 'f':
        plik[i++]= optarg;
          while (argv[optind]!=NULL)
             {
                  printf("%s\n",argv[optind]); //to dla mojej wygody jest
                  if(argv[optind]!="-%c")
                     {
                       plik[i]=argv[optind];
                       i++;
                       optind++;
                     }
        else
        break;
            }
      break;
    case 'k':
      kat = optarg;
      break;

ale w takim przypadku traktuje -k też jako kolejny argument .. i wczytuje wszystko jak leci aż do końca lini poleceń jaką wpisałem nie wiem jak po prostu ma rozpoznać, że to jest już ostatni argument dla opcji -f i żeby ponownie wykonał getopt(bo getopt raz wywołany dotyczy 1 opcji, czyli jak wywołam pierwszy raz getopt to on obsluzy -f, wyjdzie i wezmie sie za -k).

//EDIT

Dobra zrobiłem(być może trochę prymitywnie, ale efekt jest ;) ). Po prostu opuszcza pętlę while jak napotka znak '-'. O w taki sposób:

case 'f':
     plik[i++]= optarg;
     while (argv[optind][0]!='-')
           plik[i++]=argv[optind++];