|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2001
Messaggi: 1049
|
problema in c
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 |
|
|
|
|
|
#2 | |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
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. Codice:
char nomefile = (i); char testo[] = "evvai"; scrivooutput = fopen(nomefile, "wt"); 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.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2001
Messaggi: 1049
|
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 |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
while (.....)
{
char nomefile[20];
sprintf(nomefile, "%d.txt", i);
scrivooutput = fopen(nomefile, "wt");
....
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#5 | |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Devi solo studiare bene il funzionamento delle stringhe in C.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Aug 2001
Messaggi: 1049
|
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 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:06.



















