V I S U A L I Z Z A D I S C U S S I O N E |
inf89 |
Inserito il - 07/09/2011 : 18:15:02 salve ho creato un programma in c che mi legge un file di testo.txt con su siscritto nome cognome e numero di telefono...ora dovrei fare la ricerca per cognome,so che posso memorizzarlo nella struttura chi mi spiega come memorizzare il file nella struttura? chi mi scrive il codice con la spiegazione????oppure se sapete come fare la ricerca senza utilizzare la struttura???grazie
|
20 U L T I M E R I S P O S T E (in alto le più recenti) |
coma |
Inserito il - 12/09/2011 : 18:06:58 Ok, ma ciò che vuoi fare non è assolutamente possibile, in quanto riusciresti a malapena a memorizzare l'ultima persona facente parte della rubrica visto che non vai ad operare su un array di strutture, cosa che nel tuo specifico caso, sarebbe particolarmente appropriata! |
inf89 |
Inserito il - 12/09/2011 : 18:00:55 io devo prendere i dati dal file che sto leggendo e li devo memorizzare nella struttura... |
coma |
Inserito il - 12/09/2011 : 17:46:16 Scusami, ma quale sarebbe la funzione del prototipo inserimento()? Vorresti inserire dei valori nella tua struttura oppure prelevarli dal file? Perchè usando la funzione fscanf() non fai altro che acquisire dei dati dal file da te analizzato! |
inf89 |
Inserito il - 12/09/2011 : 17:45:24 cmq ora faccio la ricerca e posto,grazie peri il vostro aiuto
|
inf89 |
Inserito il - 12/09/2011 : 17:38:33 ho commesso solo quello di errore?
|
coma |
Inserito il - 12/09/2011 : 17:32:01 Forse scritto così sarebbe leggermente più leggibile ma soprattutto ti darebbe la possibilità di trovare con maggiore facilità gli errori che hai commesso. Per l'esattezza, hai nell'utilizzo della fscanf() la specifica delle variabili di tipo stringa che come ben sai sono degli array, quindi va rimosso l'amperstand per entrambe le stringhe e va unicamente lasciato per il numero di telefono che essendo una variabile normalissima va passata per indirizzo per poter modificare il suo valore! http://pastebin.com/JKDEmVWE |
inf89 |
Inserito il - 12/09/2011 : 17:19:25 #include <stdlib.h> #include <stdio.h> #include <string.h> struct rubi{ char nome [20]; char cognome[20]; int numero;}rub; void visua(FILE *f); void inserimento(FILE *f); int main(){ int a; FILE *f; int i; f=fopen("rubrica.txt","r"); if(f==NULL){ printf("impossibile\n"); exit(0);} visua(f); fclose(f); f=fopen("rubrica.txt","r"); if(f==NULL){ printf("impossibile\n"); exit(0);} inserimento(f); fclose(f); system ("pause"); return(0); } void visua(FILE *f){ char c; c=fgetc(f); while(c!=EOF){ printf("%c",c); c=fgetc(f);} }
void inserimento(FILE *f) { int i; i=0; while(!feof(f)){ fscanf(f,"%s,%s,%d\n",&rub.nome,&rub.cognome,&rub.numero); i++; }}
|
inf89 |
Inserito il - 12/09/2011 : 17:17:33 io ora metto il codice che ho creato senza ricerca ,vorrei sapere solo se e giusto ?
|
coma |
Inserito il - 12/09/2011 : 17:11:39 Citazione: Messaggio inserito da genius
coma, l'hai letto quel codice? è ovvio che se usi un numero del tipo "3391234567" avrai un risultato corretto, ma ripeto, prova con 0801234567 o +393331234567.
A parte questo, rappresentare come int o long int un numero telefonico è sbagliato concettualmente. ;)
Si hai ragione, poichè volendo generalizzare al massimo l'utilizzo che potrebbe farsi di questo programma andrebbe gestito appropriatamente qualsiasi tipo di numero telefonico e con un array di caratteri non si hanno problemi di alcun tipo! :) Ti ringrazio, dopotutto non si smette mai di imparare ed inoltre spero che il mio modo di fare non venga interpretato come voglia di fare il gradasso, ma un semplice modo, in primis, di aiutare gli altri(nel nostro caso inf89) ed in secondo luogo, imparare qualcosa di nuovo confrontandomi con gente preparata come voi!!;)
@inf89 : continuo a non capire quale sia il problema! Devi fare una ricerca, adotta un algoritmo di ricerca che può essere di tipo sequenziale oppure dicotomica( ricerca binaria ). Occhio però che, seguendo il consiglio di genius, ovvero di adoperare degli array di caratteri, dovresti utilizzare la funzione strcmp() per confrontare i numeri di telefono che hai memorizzato nella rubrica! |
inf89 |
Inserito il - 12/09/2011 : 17:03:51 infatti il mio problema eera quello di fare la ricerca all'interno del file,e io pensavo di inserire tutto all'interno della struttura e poi ricerca al''interno della struttura... vi chiedo un altra cosa,se nel caso nn voglio mettere tutto all'interno della struttura come faccio a fare la ricerca?
|
genius |
Inserito il - 12/09/2011 : 17:02:19 coma, l'hai letto quel codice? è ovvio che se usi un numero del tipo "3391234567" avrai un risultato corretto, ma ripeto, prova con 0801234567 o +393331234567.
A parte questo, rappresentare come int o long int un numero telefonico è sbagliato concettualmente. ;) |
inf89 |
Inserito il - 12/09/2011 : 17:01:28 o usato i ++,perche poi mi serve per fare la ricerca all'interno della struttura,e quindi usare 'i' per il ciclo for...
|
coma |
Inserito il - 12/09/2011 : 16:49:25 Guarda che non penso che abbia trattato da ignorante ne te, ne tantomeno inf89, anzi, ho cercato con la massima disponibilità di scrivere qualcosa di utile! Ed in ogni caso ti rispondo con uno stralcio di codice che, nonostante ciò che tu dica sia corretto, dimostra che ciò che stavo asserendo precedentemente fosse assolutamente corretto. have a look here -> http://pastebin.com/50E4DUaZ @inf89 : perchè non ci mostri un codice identato come si deve e magari possibilmente caricato su un apposito sito di nopaste? Non capisco per quale motivo tu utilizzi un contatore ( i++ ) però sostanzialmente il codice è corretto, a parte la questione del numero di telefono, in quanto, o dovresti adoperare come genius dice un array di caratteri oppure, come nel codice che ho realizzato, un long int! |
inf89 |
Inserito il - 12/09/2011 : 14:35:03 vorrei sapere se e giusto scrivere in questo modo per memorizzare il contenuto del file nella struttura...se no mi correggete il codice...grazie |
genius |
Inserito il - 12/09/2011 : 14:23:40 Citazione: Messaggio inserito da coma
Citazione: Messaggio inserito da genius
Sicuramente il numero di telefono non è un int, ma un array di char
Beh però genius non sarebbe tanto sbagliato adoperarlo, anche perchè non si è prefissato di fare qualche tipo di modifica al suddetto numero, volontà dalla quale scaturisce la necessità di adoperare un array di caratteri per modificare il tutto in maniera decisamente più agevole. In ogni caso, visto che anche un numero di cellulare occuperebbe massimo 10 cifre, una variabile di tipo int sarebbe appropriata in questo contesto e per farti meglio capire cosa intendo, ti rimando alla documentazione ufficiale, nella quale puoi ben vedere come i signed int abbiano una capienza tale da poter supportare anche eventuali numeri di telefono. http://www.cplusplus.com/doc/tutorial/variables/
coma, ok la buona volontà, ok che primeggi sempre su tutti, ma prima di trattare da 'ignorante' le persone con cui interloquisci, cerca almeno di capire chi hai davanti.
I tipi numerici si usano solo e soltanto se vuoi rappresentare un numero e se su quel numero vuoi farci operazioni matematiche.
Ora se vuoi divertirti fai le seguenti prove: prova a leggere da file questo numero di telefono 0801234567. Salvalo in un intero, e poi stampalo. Dimmi se quella che vedi è l'informazione che ti aspetti.
se ancora non sei convinto prova a piazzare in un int il numero internazionale: +390801234567.
Questo per dirti che non è una questione di capienza, ma di semantica. Il numero di telefono non è un numero 'matematico' ma una stringa di caratteri numerici.
Spero di essere stato più chiaro, e magari scusami se sono stato troppo duro all'inizio, ma non ho resistito :P |
coma |
Inserito il - 12/09/2011 : 13:15:05 Citazione: Messaggio inserito da genius
Sicuramente il numero di telefono non è un int, ma un array di char
Beh però genius non sarebbe tanto sbagliato adoperarlo, anche perchè non si è prefissato di fare qualche tipo di modifica al suddetto numero, volontà dalla quale scaturisce la necessità di adoperare un array di caratteri per modificare il tutto in maniera decisamente più agevole. In ogni caso, visto che anche un numero di cellulare occuperebbe massimo 10 cifre, una variabile di tipo int sarebbe appropriata in questo contesto e per farti meglio capire cosa intendo, ti rimando alla documentazione ufficiale, nella quale puoi ben vedere come i signed int abbiano una capienza tale da poter supportare anche eventuali numeri di telefono. http://www.cplusplus.com/doc/tutorial/variables/ |
genius |
Inserito il - 12/09/2011 : 12:49:52 Sicuramente il numero di telefono non è un int, ma un array di char |
inf89 |
Inserito il - 12/09/2011 : 12:00:27 ho creato una struttura cosi di rubrica telefonica: struct rubi{ char nome [20]; char cognome[20]; int numero;}rub;
per inserire o creato questa procedurA: void inserimento(FILE *f) { int i; i=0; while(!feof(f)){ fscanf(f,"%s,%s,%d\n",&rub.nome,&rub.cognome,&rub.numero); i++; }}
VORREI SAPERE SE E GIUSTA???GRAZIE |
coma |
Inserito il - 08/09/2011 : 15:24:39 Beh più che altro ti serve semplicemente vedere dei piccolo tutorial riguardanti l'acquisizione di dati da file ( operazione effettuata mediante le funzioni fgets o fscanf, o nell'eventualità, sfruttando apposite funzioni create da te ) che puoi tranquillamente trovare cercando su google viste le caterve di casi simili al tuo che ci sono in giro per il web. Per quanto riguarda invece la memorizzazione di suddetti dati in apposite strutture, non vi è nulla di diverso rispetto ad una semplice procedura di assegnazione dei valori ai vari campi della struttura ( ammesso che essi siano di tipo int, char, float o double, poichè nel caso di array di caratteri ( stringhe ), hai la necessita di utilizzare funzioni incluse nell'header "string.h" come strcpy o meglio ancora strncpy ). Have a look [url=http://lmgtfy.com/?q=C+acquisizione+dati+da+file+]here[/url] |
Premoli |
Inserito il - 08/09/2011 : 12:27:50 Io potrei anche scriverti il codice ma tu cosa ci guadagneresti?
E' davvero una cosa semplice da fare si tratta solo di capire come funziona fscanf oppure fgets ecc.ecc... puoi usare la funzione che più ti conviene in base a come hai organizzato il file da cui devi leggere.
Provaci posta qualcosa e poi se non funziona vediamo dove sbagli... prova a dare un'occhiata anche su questo sito: http://digilander.libero.it/uzappi/C/librerie/funzioni/scanf.html ci sono i prototipi delle funzioni che possono servirti, con qualche breve spiegazione... |
|
|