PDA

Visualizza la versione completa : [C] Lettura e scrittura dati da/su file (era: Programma)


Grace92
02-07-2012, 10:37
Salve, vorrei chiedervi un aiuto.. da qualche giorno che provo a fare un esercizio che il mio prof di informatica mi ha dato. Soltanto che secondo me,provandoci anche..non ha senso quello ke lui ha detto..in pratica l'esercizio : "inserire 10 regioni con nome,popolazione e reddito medio da file riempendo una struttura, stampare gli elementi ordinamente per popo,redd o nome
cancellare una regione ed inserirla un altra..alla fine stampare sul file.".. fino a qui tutto ok..ma soltanto che a lezione ha detto di utilizzare i puntatori..e tutti gli esempi ke ha fatto sono utilizzando i vettori e non i file..infatti con i vettori sono riuscita a farlo tranquillamente..ma con i file??..non ci sto proprio riuscendo..sapete darmi una mano??grazie mille!!ps dimenticavo il linguaggio C standard

Scara95
02-07-2012, 10:46
Posta il codice che hai scritto...
Devi leggere dal file e mettere i dati in una qualche struttura dati (ad esempio i vettori), quindi lavori sempre con i vettori e quando arriva il momento di salvare riscrivi tutto sul file.

Edit: Ah, non dimenticarti i tag CODE

Grace92
02-07-2012, 10:55
sisi li devo mettere in una struttura dati..allora ora provo in questa maniera..vediamo se c riesco..se ho problemi scrivo d nuovo qui..cmq scusami sono nuova del forum ..

Grace92
02-07-2012, 11:30
Quindi per caricare i dati che ci sono nel file..li metto nella struttura giusto?..soltanto che non so xke m da errore :S



#include<stdlib.h>
#include<stdio.h>
#include <string.h>

struct list_el {
char nome[15];
int popolazione;
int redditom;
struct list_el * next;
};

typedef struct list_el item;

int nk[10];
item * curr, * head, * previous, * xfree, * xnext;
item elemento[10];

int main() {
FILE *filea;
filea=fopen("F:/elenco.txt","r+");
char nomex[15];
char n[15][15];
int i, kk, s1, s2, risposta, risposta1;
int pop[10];
int red[10];



for(i=1;i<=10;i++)
{
fscanf(filea,"%s",nome[i]);
fscanf(filea,"%d",popolazione[i]);
fscanf(filea,"%d",redditom[i]);
}


soltanto che m da errore su fscanf xke?

LeleFT
02-07-2012, 12:29
Originariamente inviato da Grace92
soltanto che m da errore su fscanf xke?

Ciao e benvenuta sul forum.
Alcune semplici regole da seguire nell'apertura e nella conduzione delle discussioni sul forum le trovi nel Regolamento interno (http://forum.html.it/forum/showthread.php?s=&threadid=973887) e le riassumo qui:

1) Il linguaggio usato va sempre indicato nel titolo (corretto io)
2) Il titolo della discussione deve riassumere il contenuto della discussione ("Programma" troppo generico: tutte le discussioni qui riguardano programmi) (corretto io)
3) Il codice va postato usando gli appositi tag CODE (corretto io)
4) Quando qualcosa (compilazione/esecuzione) ti d errore... posta l'errore. Dire semplicemente "mi d errore" non aiuta nessuno perch non stai dicendo a nessuno quale errore.


Ciao. :ciauz:

Scara95
02-07-2012, 12:35
Posta l'errore e il formato del file.

Comunque l'errore evidente:

fscanf(filea,"%s",nome[i]);
fscanf(filea,"%d",popolazione[i]);
fscanf(filea,"%d",redditom[i]);
I vettori nome popolazione e redditom non sono stati definiti da nessuna parte!

Grace92
02-07-2012, 12:49
Grazie mille LeleFT per aver corretto gli errori..non ho avuto modo di leggere il regolamento..scusami!

Per quanto riguarda il programma..io li avevo messi nella struct..per questo..siccome il prof diceva in una struttura..quindi cancello la struct e metto tutto nei vettori?

Scara95
02-07-2012, 13:39
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct info_s {
char nome[15];
unsigned int popolazione;
double redditom;
} info_t;

int main() {
char buffer[100];
info_t prova;
fgets(buffer, 15, stdin);
strcpy(prova.nome, buffer);
prova.nome[strlen(prova.nome)-1] = NULL;
fgets(buffer, 100, stdin);
prova.popolazione = atoi(buffer);
fgets(buffer, 100, stdin);
prova.redditom = atof(buffer);
printf("Nome: %s\nPopolazione: %u\nReddito Medio: %0.2f\n", prova.nome, prova.popolazione, prova.redditom);
return 0;
}

Prova a capire e riadattare questo codice...

Loading