PDA

View Full Version : problema in c


sneeze
03-05-2006, 00:02
Allora ragazzi, spero e sono certo che mi possiate aiutare...
devo far funzionare un ciclo while all'interno del quale mi si faccia un fout di file che però ad ogni giro del ciclo mi cambino nome..
ad esempio parte il while e la funzione fopen mi crea il file 1.txt al secondo giro mi crei il file 2.txt ecc ecc fino alla fine del while....
non riesco a farlo perchè fopen vuole come argomento un costant char e quindi non riesco ad ogni giro a cambiargli nome con la conseguenza che mi crea sempre lo stesso sovrascrivendolo....


#include <stdio.h> /* Includiamo la libreria standard */

int main(void)
{
int errore = 0;
FILE *leggoinput, *scrivooutput; /* Definisco 2 strutture FILE */
int i = 0;
while (i !=10)
{
char nomefile = (i);
char testo[] = "evvai";
scrivooutput = fopen(nomefile, "wt");


fwrite(testo,1,5,scrivooutput);


fclose(scrivooutput);
i++;

}

return(0); }

questo è un esempio e non funziona perchè fopen non si beve la variabile nomefile in quanto char e non const char...
e se dichiaro nomefile come char[] non si beve i come argomento in quanto (credo) non è costante ma a sua volta variabile...

magari è una cacchiata ma non vedo uscita

grazie

Ziosilvio
03-05-2006, 00:38
devo far funzionare un ciclo while all'interno del quale mi si faccia un fout di file che però ad ogni giro del ciclo mi cambino nome
Crea un array di stringhe con i nomi dei file, e a ogni passo del ciclo usa il nome corrispondente.
Puoi anche creare il nome "al volo" usando strcat e strcpy, più una funzione che ti trasforma un numero in una stringa decimale che lo rappresenta: puoi creartene una su due piedi, oppure usare sprintf in modo un po' furbo.
char nomefile = (i);
char testo[] = "evvai";
scrivooutput = fopen(nomefile, "wt");
i, e quindi nomefile, è un char con un valore tra 0 e 9, che ne è (di solito) il codice ASCII.
Dei caratteri che hanno codice ASCII tra 0 e 9, molti non sono stampabili, e non possono essere usati in un nome di file.
Inoltre il tipo è sbagliato: un singolo carattere è un char; una stringa di lunghezza 1 invece è un array di char costituito da due caratteri, l'ultimo dei quali nullo.

sneeze
03-05-2006, 00:57
ciao grazie della risposta...
purtroppo non posso seguire il primo consiglio perchè potrei aver bisogno di creare n file e un array di + di 30 strighe diventa una cosa impensabile..
la seconda soluzione è quella corretta per la mia esigenza solo che siccome sono completamente agli inizi con il c non ho capito bene come si possa eseguire.. sai darmi qualche aiuto in più?

grazie mille per la pazienza

andbin
03-05-2006, 09:14
la seconda soluzione è quella corretta per la mia esigenza solo che siccome sono completamente agli inizi con il c non ho capito bene come si possa eseguire.. sai darmi qualche aiuto in più?Basta usare la sprintf:
while (.....)
{
char nomefile[20];

sprintf(nomefile, "%d.txt", i);
scrivooutput = fopen(nomefile, "wt");

....
}

Ziosilvio
03-05-2006, 09:36
non posso seguire il primo consiglio perchè potrei aver bisogno di creare n file e un array di + di 30 strighe diventa una cosa impensabile
Puoi.
Devi solo studiare bene il funzionamento delle stringhe in C.

sneeze
04-05-2006, 00:52
grazie mille ragazzi ora provo con lo sprintf poi per esercizio provo a vedere se riesco a creare un array di n campi con n stringhe in auomatico secondo necessità.
vi faccio sapere