PDA

Visualizza la versione completa : [C] Scrivere matrice su file


luca_87
16-02-2010, 21:23
Salve ho un problemino nel scrivere gli elementi di una matrice quadrata su un file.
Vorrei che gli elementi della matrice venissero scritti in modo corretto, ovvero "n elementi in riga" ed "n elementi in colonna" mentre con questo mio codice i valori vengono scritti tutti sulla prima riga, la stessa cosa avviene per il vettore. Come posso fare?


-
-
-
if (argc!=5)
{ printf("sintassi comando:%s, filematrice filevettore dimensione valore\n",argv[0]); exit(0);
}

if ((matrice=fopen( argv[1],"wb+"))==NULL || (vettore=fopen( argv[2],"wb+"))==NULL) {
printf("Errore nella creazione del file\n");
exit(0);
}
dimensione=atoi(argv[3]);
valore=atoi(argv[4]);
for (cont=0;cont<dimensione*dimensione;cont++)
{
fprintf(matrice,"%d",valore);
if (cont<dimensione)
{
fprintf(vettore,"%d",valore);
} }

Grazie per gli eventuali aiuti!!

CIaoooooooooooo

oregon
16-02-2010, 21:32
Devi usare due cicli



for (cont1=0;cont1<dimensione;cont1++)
{
for (cont2=0;cont2<dimensione;cont2++)
fprintf(matrice, "%d ", valore);

fprintf(matrice, "\n");
}

luca_87
16-02-2010, 22:20
Grazie, ma non mi funziona ugualmente :shy:

Se eseguo il programma "creamatrice.exe matrice.txt 2 10", quindi una matrice 2x2 con tutti elementi 10 in output avrò
10 10 10 10

Invece quello che vorrei è
10 10
10 10

oregon
17-02-2010, 00:13
Con il codice che ti ho mostrato, avrai quello che chiedi ... l'hai forse modificato ?

Cosa hai scritto (mostra tutto il codice modificato ...)

luca_87
17-02-2010, 00:24
#include <stdlib.h>
#include <stdio.h>
//PROGRAMMA CHE CREA UN FILE CONTENENTE UNA MATRICE QUADRATA E UN FILE CONTENENTE UN VETTORE
int main (int argc,char *argv[]) {
FILE *matrice;
FILE *vettore;
int dimensione=0, valore=0, cont1=0, cont2=0;
if (argc!=5)
{
printf("sintassi comando:%s, nomefile_matrice nomefile_vettore dimensione valore\n",argv[0]);
exit(0);
}
if ((matrice=fopen( argv[1],"wb+"))==NULL ||
(vettore=fopen( argv[2],"wb+"))==NULL)
{
printf("Errore nella creazione del file\n");
exit(0);
}
dimensione=atoi(argv[3]);
valore=atoi(argv[4]);
for (cont1=0;cont1<dimensione;cont1++)
{ for (cont2=0;cont2<dimensione;cont2++)
fprintf(matrice, "%d ", valore);
fprintf(matrice, "\n");
}

for(cont1=0; cont1<dimensione;cont1++)
{
fprintf(vettore,"%d ",valore);
fprintf(vettore, "\n");
}
printf("File creati\n");
fclose(matrice);
fclose(vettore);
return 0;
}

oregon
17-02-2010, 00:33
Ho provato e genera il file della matrice correttamente ...

Semmai c'e' un errore in quello del vettore in quanto deve essere



for(cont1=0; cont1<dimensione;cont1++)
fprintf(vettore,"%d ",valore);
fprintf(vettore, "\n");


E quando esegui il programma, hai dimenticato di indicare il nome del file del vettore.
Quindi sarà

creamatrice.exe matrice.txt vettore.txt 2 10

e non come hai indicato tu

luca_87
17-02-2010, 01:15
Nulla da fare, ho provato anche su un altro pc.. è come se non rilevasse lo \n..

luca_87
17-02-2010, 01:26
Infatti ho appena risolto mettendo \r\n e non solo \n!
Comunque in altri pezzi di codice lo \n mi funziona benissimo, l'inghippo riguarda solo la scrittura di file..
Chi mi spiega questo mistero? :master:

oregon
17-02-2010, 07:35
Ci dici come lavori? Linux? Windows? Con quale strumento controlli i file appena scritti?

MItaly
17-02-2010, 09:07
Se scrivi file di testo non devi mettere "b" nella stringa di apertura del file, altrimenti non avranno luogo le trasformazioni di carattere automatiche (ad esempio, '\n'->"\r\n" su Windows).

Loading