C Pomoc z odczytywaniem argc argv

0
 #include <stdio.h>
#include <stdlib.h>
char shifter(int index, char let, char* alphabet)
{
        int ind=0;
        char let2;
        ind=strstr (alphabet,let);
        ind=ind-2*index;
        if(ind<0)

        {
            ind=52+ind;
        }
        let2=alphabet[ind];
    return let2;
}
void help()
{
    printf("===================================================\n");
    printf("                Instruction\n");
    printf("The program should run from console with following\n parameters: program.exe -i input.txt -o output.txt -r 3.\n");

}
int main(int argc, char** argv)
{
    char alphabet[52]="AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
    FILE *f1;
    FILE *f2;
    char let, let3;
    int i;
    int index;
    for(i=0; i<argc; i++)
    {
        if(strcmp (argv[i],"-i") == 0)
        {
            f1=fopen(argv[i+1], "r");
        }
        if(strcmp (argv[i],"-o") == 0)
        {
            f2=fopen(argv[i+1], "w");
        }
        if(strcmp (argv[i],"-r") == 0)
        {
            index=argv[i+1];
        }
        if(strcmp (argv[i],"-h") == 0)
        {
            help();
            return;
        }
    }
    if(f1==NULL)
    {
        help();
        return;
    }
    while(!feof(f1))
    {
        let = fgetc (f1);
        if(let!=' ' && let!='\n' && !feof(f1) && let!='.')
        {
        let = shifter(index, let, alphabet);
        }
        fprintf(f2, "%c", let);
    }

    fclose(f1);
    fclose(f2);
    return 0;
}

Nie wiem dla czego zmienna index przyjmuje mi randomowe wartości/Nie wiem jak odpowiednio zapisać odczytywanie intigera z parametrów :(. Czy ktoś mógł by mi pomóc?

1

Popraw wcięcia: http://format.krzaq.cc/ (style file)

Przypisujesz do liczby ciąg znaków. Używaj atoi() do konwersji.

0

Jeśli mógł bym cię jeszcze wykorzystać. Nie wiem dlaczego wysypuje mi program przy przechodzeniu do funkcji shifter.
Edit
Wybacz przy funkcji strstr.

0

Odpal debuggera, bo takie rzeczy trudno wywróżyć z kodu.

Edit: http://en.cppreference.com/w/c/string/byte/strstr

The behavior is undefined if either str or substr is not a pointer to a null-terminated byte string.

0

Ok już rozumiem. Nie mogę chyba chara w tej funkcji dać. Dziękuję za pomoc.

0
 
         if(ind<0)
 
        {
            ind=52+ind;
        }
        let2=alphabet[ind];

alfabet jak widze ma 52 elementy, więc wychodzisz tu poza jego zakres... A przynajmniej może wyjść...

0

Dodatkowo nie sprawdzasz czy f2 != NULL. Fopen może sfailować z wielu powodów (dokładnie z tych samych co open na *niksach, http://man7.org/linux/man-pages/man2/open.2.html).

0
kaczus napisał(a):
 
         if(ind<0)
 
        {
            ind=52+ind;
        }
        let2=alphabet[ind];

alfabet jak widze ma 52 elementy, więc wychodzisz tu poza jego zakres... A przynajmniej może wyjść...

W tym ifie ind jest ujemny więc tak naprawde odejmuję, a nie dodaję. Mimo wszystko dzięki. Sprawdzanie f2 już wpisałem. Dzięki. Myślę, że ocena z laborek będzie pozytywna.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.