[C] Czytanie z pliku

Transpluton
Użytkownik
Użytkownik
Posty: 125
Rejestracja: 1 gru 2012, o 14:45
Płeć: Mężczyzna
Lokalizacja: Zależna od przestrzeni metrycznej...
Podziękował: 94 razy

[C] Czytanie z pliku

Post autor: Transpluton »

W swoim programie mam odczytać plik testowy, o następującej treści:

Kod: Zaznacz cały

0 7
0 8

1 5
1 10

2 4
2 11

3 3
3 12

4 3
4 12

5 3
5 12

6 4
6 11

7 5
7 10

8 7
8 8
Liczba po lewej to numer wiersza, zaś liczba po prawej to numer kolumny w tablicy dwuwymiarowej. Dla tych pól komórki tej tablicy mają być równe -2. Kompilując program wydaje mi się, że nie odczytuje on pliku tekstowego, gdyż tablica jest wypełniona zerami... Gdzie popełniam błąd? Poniżej zamieszczam funkcję programu:

Kod: Zaznacz cały

void wypelnianie_plikiem(int y,int x,int** plansza)
{
    int i,j;
    for(i=0;i<x;i++)
        for(j=0;j<y;j++)
            plansza[i][j]=0;
    FILE* wskaznik_pilkowy;
    wskaznik_pilkowy=fopen("wejscie.txt","r");
    printf("1");
    if(wskaznik_pilkowy==NULL)
    {
        printf("Nie mozna otworzyc pliku.
");
        return;
    }
    while(feof(wskaznik_pilkowy)==0)
    {
        fscanf(wskaznik_pilkowy,"%d",&i);
        fscanf(wskaznik_pilkowy,"%d",&j);
        if(j>x || x>i)
        {
            printf("Wspolrzedne pliku przekraczaja wymiary planszy.
");
            return;
        }
        plansza[i][j]=(-2);
    }
    fclose(wskaznik_pilkowy);
}
-- 8 mar 2016, o 14:10 --Proszę uznać problem za niebyły, najprawdopodobniej ten warunek z 19 linijki były powodem,
if(j>x || x>i)
. Powinno być

Kod: Zaznacz cały

if(j>x || i>y)
.
liu
Użytkownik
Użytkownik
Posty: 1330
Rejestracja: 10 paź 2004, o 13:30
Płeć: Mężczyzna
Lokalizacja: Suchedniów
Pomógł: 104 razy

[C] Czytanie z pliku

Post autor: liu »

Skoro już zapostowałeś...

Kod: Zaznacz cały

wskaznik_pilkowy=fopen("wejscie.txt","r");
    printf("1");
    if(wskaznik_pilkowy==NULL)
    {
        printf("Nie mozna otworzyc pliku.
");
        return;
    }
Idiomatycznie robi się to tak:

Kod: Zaznacz cały

if((wskaznik_plikowy = fopen("wejscie.txt", "r")) == NULL) {
    puts("Nie mozna otorzyc pliku.");
    return;
Ponadto skoro funkcja może zakończyć się nieszczęśliwie (jak wymiary tablicy nie takie, czy pliku brak), to powinna zwracać np. inta, powiedzmy 0 jak wszystko w porządku i -1 jak się nie udało. Łatwiej będzie to wtedy wpisać do logiki programu i uniknąć w dalszej części czegoś w stylu próby użycia pustej planszy.
ODPOWIEDZ