PDA

Visualizza la versione completa : [C/C++] Lettura dati da file


Bak86
10-05-2006, 16:12
Ciao a tutti, ho un problema con un programma in C.
in pratica devo creare una piccola battaglia navale, che permetta di scegliere se caricare lo schema delle navi da file, farlo creare sul momento dall'utente o caricarne uno memorizzato nel sorgente. Quello che non so come fare è far leggere lo schema da file, che si presenta in questo modo:

start
A 3 2 1
F 4 2 0
D 1 3 0
E 6 3 0
C 3 4 1
end

nella prima riga leggo la prima nave (che nella matrice indico con gli 1):
A3 sono le coordinate della prima casella su cui è posizionata la nave, 2 è la lunghezza della nave, e 1 è la disposizione (1=orizzontale 0=verticale).

nella seconda riga leggo la seconda nave (indicata con i 2) e così via fino alla 5° nave.

letto questo schema devo trasferire i dati in una matrice, che dovrebbe assumere questo aspetto:

| 0 1 2 3 4 5 6
--|--------------------
A | 0 0 0 1 1 0 0
B | 0 0 0 0 0 0 0
C | 0 0 0 5 5 5 5
D | 0 3 0 0 0 0 0
E | 0 3 0 0 0 0 4
F | 0 3 0 0 2 0 4
G | 0 0 0 0 2 0 4

in pratica devo ottenere questo:
navi_utente[righe][colonne]={{0,0,1,1,0,0,0},{0,0,0,0,0,0,0},{0,0,5,5,5,5,0}, {3,0,0,0,0,0,0},{3,0,0,0,0,4,0},{3,0,0,2,0,4,0},{0 ,0,0,2,0,4,0 }};

Come faccio?? non ho molta domestichezza con i file, e non so come andare a leggere i dati e portarli nella matrice... qualcuno può aiutarmi??

Grazie mille!! ciao

Bak86
10-05-2006, 16:23
scusate.. stavo dimenticando un particolare... all'interno del file ci sono più schemi, delimitati dalle voci "start" e "end", all'inizio del programma devo indicare il numero dello schema da leggere..... :messner: :messner: :messner:

ascatem2
10-05-2006, 17:04
beh, intanto è strutturato male il file, cioè, se dici che devi leggere uno schema particolare ti conviene di numerare gli schemi

qualcosa come 1start e 1end

visto che poi sarebbe l'unico caso in cui il comando inizia con un numero ti andrebbe bene

detto ciò tu hai le seguenti funzioni:

int fgetc( FILE *stream );//legge un unico carattere
char *fgets( char *str, int num, FILE *stream );//legge una riga
int fscanf( FILE *stream, const char *format, ... );//legge delle parole

secondo me ti conviene leggere per riga (fgets), appena trovi start controlli se il numero dopo start è il numero dello schema che vuoi, se è così lavori sulle stringhe sottostanti fino ad arrivare ad end, se invece non ti aggrada cerchi il prossimo start

Loading