Niedziałająca funkcja

0

Program nie wchodzi do funkcji wczytaj(); Dlaczego?

Nie chce nawet wydrukować na ekran 1 polecenia w funkcji czyli printf("ahoj 123");
Funkcja wczytaj_rozmiar() działa, a wygląda niemal identycznie.

Nazwy plików z argumentów wiersza poleceń są zgrywane prawidłowo do struktury.
nazwa to np. tutaj.txt

void wczytaj_rozmiar(struct struktura_planszy *s, struct struktura_argumentow_wiersza_polecen *p, int *rezultat){
    FILE *mojplik; //deklaruje wskaznik na zmienna FILE
    mojplik = fopen(p->nazwa_pliku1, "r");
    if (mojplik == NULL){
        printf("Blad otwarcia pliku1234\n");
        *rezultat = 2;
        exit(EXIT_FAILURE);
    }
    printf("tutaj bylem\n");
    fscanf(mojplik, "%d", &s->liczba_wierszy);
    fscanf(mojplik, "%d", &s->liczba_kolumn);
    printf("tutaj tez jestem\n");
    if (fclose(mojplik) != 0){
        printf("Blad przy zamykaniu pliku12345\n");
        *rezultat = 2;
    }

}
void wczytaj(struct struktura_planszy *s, struct struktura_argumentow_wiersza_polecen *p, int *rezultat){
    printf("ahoj 123");
    FILE *mojplik; //deklaruje wskaznik na zmienna FILE
    mojplik = fopen(p->nazwa_pliku1, "r"); 
    printf("ahoj gjlk123");
    if (mojplik == NULL){
        printf("Blad\n");
        printf("Blad otwarcia pliku\n");
        *rezultat = 2;
    }
//dalsza część fukcji......
}
struct struktura_planszy{//Struktura przechowuje wszystkie dane jakie będą potrzebne przez program i mogą być odczytane z pliku zapisu
    int liczba_wierszy; //Przechowuje informacje o ilości wierszy z których składa się plansza
    int liczba_kolumn; //Przechowuje informacje o ilości kolumn z których składa się plansza
    int **ryby; //Przechouwje informacje o ilości ryb na każdym polu
    int **pingwiny_na_polu; //Przechouwje informacje o tym który gracz stoi na danym polu lub czy jest ono puste
    int liczba_twoich_pingwinow_na_planszy; //Przechowuje informacje o tym ile pingwinów gracza znajduje się w tej chwili na planszy
    int wynik[9]; //Przechowuje inforamcje o wyniku gracza
    char identyfikator[9][51]; //identyfikator gracza
    int numer_gracza[9]; //Przechowuje informacje o numerze gracza
};

struct struktura_argumentow_wiersza_polecen{//Struktura przechowuje dane przekazywane programowi przez argumenty wiersza poleceń 
    int pingwiny_max; //Przechowuje informacje o liczbie pingwinów, które muszą zostać rozstawione na planszy
    char ozn_fazy[51]; //Przechowuje informacje o fazie w której został uruchomiony program
    char nazwa_pliku1[51]; //Przechowuje informacje o nazwie pliku zapisu z którego będą odczytywane dane
    char nazwa_pliku2[51]; //Przechowuje informacje o nazwie pliku zapisu do którego będą zapisywane dane
};
int main(int argc, char** argv){
//Pomijam kod odpowiedzialny za zgrywanie argumentów wiersza poleceń do struktury struktura_argumentow_wiersza_polecen
struct struktura_planszy plansza;
    printf("tutaj23\n");
    wczytaj_rozmiar(&plansza, &argumenty, &rezultat);
    printf("tutaj3434\n");
    printf("%d %d\n", plansza.liczba_wierszy, plansza.liczba_kolumn);
    //dynamicznie przydzielam pamięć plansza.ryby
    plansza.ryby = (int**) malloc(plansza.liczba_wierszy * sizeof (int *));
    for (int i = 0; i < plansza.liczba_wierszy; i++){
        plansza.ryby[i] = (int*) malloc(plansza.liczba_kolumn * sizeof (int));
    }
    //dynamicznie przydzielam pamięć plansza.pingwiny_na_polu 
    plansza.pingwiny_na_polu = (int**) malloc(plansza.liczba_wierszy * sizeof (int *));
    for (int i = 0; i < plansza.liczba_wierszy; i++){
        plansza.pingwiny_na_polu[i] = (int*) malloc(plansza.liczba_kolumn * sizeof (int));
    }
    printf("tutaj777\n");
    wczytaj(&plansza, &argumenty, &rezultat);
    printf("tutaj\n");
0

Sądząc po pritf'ach "tu byłem" nie używasz jeszcze debuggera, a to bardzo ważna umiejętność. Domniemanie kodu jest znacznie więcej niż to, co zamieszczone. Uruchamianie przez printf jest już praktycznie niemożliwe
Na czym to uruchamiasz? Na windowsie poleciłbym Visual Studio Community lub Express, tylko niech cię nie zwiedzie wybranie języka C++/CLI, to nie jest żadne C++ a zupełnie oddzielny język

0

Używam Netbeans.
Użyłem debuggera tak jak mówiłeś i znalazłem błąd.

W ciele funkcji wczytaj() używałem fscanf() i do argumentu nie dopisałem &.
Nie wiedziałem że taki błąd może doprowadzić do tego że wcześniejsze polecenia nie zostaną wykonane.
Problem rozwiązany.

1 użytkowników online, w tym zalogowanych: 0, gości: 1