|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
[C] scrivere su un file
Ciao a tutti,
sto rispolverando il C dopo anni e purtroppo ho dimenticato tutto. Scusate la domanda sciocca ma come faccio ad aprire e leggere un file? Io ho scritto queste semplici righe di codice: Codice:
int file;
char* fileUtenti="utenti.txt";
file=open(fileUtenti, O_WRONLY);
if(file==-1)
{
printf("Ci sono stati errori nella apertura del file %s, errno: %d\n", fileUtenti, errno);
}else{
fprintf(file, "Nome: %s; Cognome: %s\n", nome, cognome);
close(file);
}
Inoltre in fase di compilazione mi viene dato questo warning: warning: passing argument 1 of ‘fprintf’ makes pointer from integer without a cast perchè? Grazie, ciao ciao. Ultima modifica di Abdujaparov : 20-07-2009 alle 10:44. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Guarda, magari ci sono varie vie per fare le cose che a me sfuggono, ma non mi è mai capitato di vedere i file dichiarati in quel modo in c.
Io ero abituato a una cosa del tipo: Codice:
FILE *f;
f = fopen("nome del file", modalità);
if (f==NULL) catch errore
else operazioni sul file
__________________
Il sole è giallo |
|
|
|
|
|
#3 | ||
|
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
Ciao a tutti,
sono riuscito a far funzionare la scrittura. Ho utilizzato la fopen ed ora funziona. Ora volevo provare a leggere un file riga per riga. Ho scritto questo codice qua: Codice:
file=fopen(fileUtenti, "r");
if(file!=NULL){
struct Persona pers;
i=1;
while(fscanf(file,"Nome: %s; Cognome: %s\n", pers.nome, pers.cognome)!=EOF){
printf("%d) Nome: %s; Cognome: %s\n", i, pers.nome, pers.cognome);
i++;
}
fclose(file);
}else{
printf("Ci sono stati errori nella apertura del file %s, errno: %d\n", fileUtenti, strerror(errno));
}
Quote:
Quote:
Le righe vengono inserire all'interno del file in questo modo: Codice:
FILE* file;
char* fileUtenti="utenti.txt";
file=fopen(fileUtenti, "a");
if(file!=NULL){
do{
struct Persona pers;
printf("Inserisci nome e cognome separati da spazio...\n");
scanf("%s %s", pers.nome, pers.cognome);
printf("Nome: %s\nCognome: %s\n", pers.nome, pers.cognome);
fprintf(file, "Nome: %s; Cognome: %s\n", pers.nome, pers.cognome);
printf("Continuare? s/n \n");
scanf("%s", risposta);
}while(strcmp(risposta,"n")!=0);
fclose(file);
printf("File chiuso....\n");
}else{
printf("Ci sono stati errori nella apertura del file %s, errno: %d\n", fileUtenti, strerror(errno));
}
A cosa può essere dovuto il problema? Un'altra domanda, dopo essere riuscito a leggere correttamente le informazioni dal file vorrei creare un vettore (di cui ovviamente non conosco a priori la dimensione) dove posso trovare un semplice esempio per capire come fare? Grazie a tutti, ciao ciao. |
||
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
il codice che riporti tu fa uso della libreria di I/O standard del C, lui ha usato delle chiamate POSIX. la differenza é che le chiamate POSIX sono disponibili solo sui sistemi compatibili e quindi sarebbe meglio usare la libreria di I/O del C, ma penso che i sistemi dove é possibile programmare in C e contemporaneamente non siano presenti anche le funzioni POSIX piu importanti ormai siano praticamente inesistenti (su Windows oltre ad esserci il subsystem Unix delle versioni Server c'é anche l'implementazione nel runtime di Visual C++, che fornisce compatibilitá a livello di sorgenti).
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Quote:
__________________
Il sole è giallo |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:33.




















