C pytania i problemy

Draqun

Użytkownik
Dołączył
Sierpień 27, 2007
Posty
67
C pytania i problemy[SOLVED]

Panowie. Mam problem z tym ponieważ nie wiem czy widać czy nie ten kawałek kodu mam mi pobrać po kolei z pliku znaki i każdy umieścić w osobnej komórce tabeli o rozmiarach 17 na 90. Zawartość pliku jest troszkę dziwna bo większość pliku stanowią znaki typu =, - , { i inne takie cuda.
Kod:
int plansz()
{
	char plansza[17][90];
	int wiersz, kolumna;
	char pole[1];
	FILE*plik;
	plik=fopen("labirynt.txt","r");
	if(plik==NULL)
		{return 1;}

	wiersz=kolumna=0;	
	while(!feof(plik))
	{
		for(wiersz;wiersz<17;wiersz++)
		{
			for(kolumna;kolumna<90;kolumna++)
				{
					fread(&plansza[wiersz][kolumna],sizeof(plansza),1,plik);
					printf("%i\n", plansza[wiersz][kolumna]);
				}
		}
	}
	return 0;
}
 
Ostatnia edycja:

Draqun

Użytkownik
Dołączył
Sierpień 27, 2007
Posty
67
Ta funkcja ma za zadanie wczytywac pokolei znaki z pliku i przypisać każdemu znakowi jedną komórkę w tabeli 17 na 90. Niestety z nie wiadomych mi powodów gdzieś się zapętla 0.o i nie wczytuje zawartości plików. Zapewne błąd lezy w tym(i w którejś pętli)
Kod:
fread(&plansza[wiersz][kolumna],sizeof(plansza),1,plik);
i powinienem zastąpić to chyba fscanf ale co bym nie zrobił rezultat jest taki sam ;/ może i bym sobie poradził tylko nie wiem z jakiego powodu debuger nie działa mi w codeblocks ;/
 
Ostatnia edycja:

RobertG

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
391
Kod:
#include <stdio.h>


int plansz()
{
    char plansza[17][90];
    int wiersz, kolumna;
    char pole[1];
    FILE*plik;
    plik=fopen("labirynt.txt","r");
    if(plik==NULL)
        {return 1;}

    for(wiersz=0;wiersz<17;wiersz++) 
    {
        for(kolumna=0; kolumna<90; kolumna++) 
        {
            int r = fscanf(plik, "%c", &plansza[wiersz][kolumna]);
            if(EOF == r) { /* mozna dodac wiecej warunkow dla r */
                return 1;
            }
        }
        fscanf(plik, "\n");
    }


    for(wiersz=0;wiersz<17;wiersz++)
    {
        for(kolumna=0;kolumna<90;kolumna++) 
        {
            printf("%c", plansza[wiersz][kolumna]); 
        }
        printf("\n");
    }


    return 0;
}


int main() {
    plansz();

}
Założyłem, że kolumny w pliku oddzielasz znakiem \n, jeśli nie są, to trzeba usunąć/zmienić linijkę "fscanf(plik, "\n")". Dla takiej funkcji można napisać szybko skrypt generujący losową tablicę by porównać, czy jest ok, np taki:

Kod:
#!/usr/bin/env python
import random
import string 

f = open('labirynt.txt', 'w')

for i in range(0, 17):
    for j in range(0, 90):
        f.write(random.choice(string.letters))
    f.write('\n')
i u mnie jest ok:
Kod:
rgawron@foo:~$ gcc lab.c && ./lab.py && ./a.out | diff - labirynt.txt
rgawron@foo:~$
, czyli zawartość tablicy po wczytaniu pliku jest taka, jak zawartość pliku.
 
Ostatnia edycja:

Draqun

Użytkownik
Dołączył
Sierpień 27, 2007
Posty
67
Troszke poprawiłem kod wplatając swoje przywyczajenia ale działa. Wielkie dzięki :)
 

Draqun

Użytkownik
Dołączył
Sierpień 27, 2007
Posty
67
Grr. Panowie mam problem z tym "kawałkiem" kodu. Otóż wyskakuje mi kilka warningów i errorów(w reguły identyczne bo niektóre funkcje to bylo Ctrl+C i Ctrl+V ale to z racji tylko kosmetycznych zmian) z racji, ze mam angielski na poziomie podłoga jak nie piwnica średnio radze sobie z problemami jakie mi wywalają(a ile już znalazłem o mamusiu ).

Więc tak. Ten 'kawałek' kodu ma za zadanie
1)popranie od użytkownika 'wskazowki' co ma się wykonać i odniesc sie do odpowiednich funkcji;
2)nastepnie odnalezienie danego elementu jakim jest @ i przesuniecie tego elementu do innej komórki (tylko jeśli z najduje się w niej myślnik)
3)odwołuje się do funkcji, która czysci mi to co mam na ekranie i wyświetli nowe położenie w tablicy mojej @
Kod:
#include<stdio.h>
#include"zmienne.h"

void poruszanie()
{
    char ruch[1];
    char kierunek[6]={d,g,p,l,u,o};
    int wybor;
    
    do{
    scanf("%s", ruch);
    while(ruch!=kierunek[0] || ruch!=kierunek[1] || ruch!=kierunek[2] || ruch!=kierunek[3]|| ruch!=kierunek[4] || ruch!=kierunek[5]);
    
    if(ruch==kierunek[0])
        wybor=0;
    else if(ruch==kierunek[1])
        wybor=1;
    else if(ruch==kierunek[2])
        wybor=2;
    else if(ruch==kierunek[3]}
        wybor=3;
    else if(ruch==kierunek[4])
        wybor=4;    
    else if(ruch==kierunek[5]}
        wybor=5;

    switch(wybor){
    case 1: dol();break;
    case 2: gora();break;
    case 3:    prawo();break;
    case 4: lewo();break;
    case 5:    unies();break;
    case 6: otworz();break;}
}

void prawo()
{
    extern char plansza[17][90];
    char podmiana;
    int a,b;
    a=b=0;
    for(a;a<17;a++)
    {
        for(b;b<90;b++)
        {
            if(plansza[a][b]=="@")
            {
                if(plansza[a][b+1]=="-")
                {
                    podmiana=plansza[a][b+1];
                    plansza[a][b+1]=plansza[a][b];
                    plansza[a][b]=podmiana;
                    czysc();
                }
                else
                {
                    printf("Nie mozesz tam isc");
                    poruszanie();
                }
            }
        }
    }
}

void lewo()
{
    extern char plansza[17][90];
    char podmiana;
    int a,b;
    a=b=0;
    for(a;a<17;a++)
    {
        for(b;b<90;b++)
        {
            if(plansza[a][b]=="@")
            {
                if(plansza[a][b-1]=="-")
                {
                    podmiana=plansza[a][b-1];
                    plansza[a][b-1]=plansza[a][b];
                    plansza[a][b]=podmiana;
                    czysc();
                }
                else
                {
                    printf("Nie mozesz tam isc");
                    poruszanie();
                }
            }
        }
    }
}

void gora()
{
    extern char plansza[17][90];
    char podmiana;
    int a,b;
    a=b=0;
    for(a;a<17;a++)
    {
        for(b;b<90;b++)
        {
            if(plansza[a][b]=="@")
            {
                if(plansza[a-1][b]=="-")
                {
                    podmiana=plansza[a-1][b];
                    plansza[a-1][b]=plansza[a][b];
                    plansza[a][b]=podmiana;
                    czysc();
                }
                else
                {
                    printf("Nie mozesz tam isc");
                    poruszanie();
                }
            }
        }
    }
}

void dol()
{
    extern char plansza[17][90];
    char podmiana;
    int a,b;
    a=b=0;
    for(a;a<17;a++)
    {
        for(b;b<90;b++)
        {
            if(plansza[a][b]=="@")
            {
                if(plansza[a+1][b]=="-")
                {
                    podmiana=plansza[a+1][b];
                    plansza[a+1][b]=plansza[a][b];
                    plansza[a][b]=podmiana;
                    czysc();
                }
                else
                {
                    printf("Nie mozesz tam isc");
                    poruszanie();
                }
            }
        }
    }
}

Ps. w bibliotece zmienne jest zadeklarowana tylko tablica, do ktorej wczytuje wcześniej mój pliczek.
 
Do góry Bottom