Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 INFORMATICA - Primo Anno
 Programmazione
 file

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista Inserisci Faccine
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Smilies
Approvazione [^] Arrabbiato [:(!] Bacio [:X] Bevuta [:273]
Caldo [8D] Compiaciuto [8)]    
compleanno [:269]
Davvero Felice [:D] Diavoletto [}:)] Disapprovazione [V] Domanda [?]
Felice [:)] Fumata [:29] Goloso [:P] Imbarazzato [:I]
Infelice [:(] Morte improvvisa da [:62]
Morto [xx(] Occhio Nero [B)] Occhiolino [;)] Palla 8 [8]
pc [:205]    
Riproduzione [:76]
Scioccato [:O]      

   Allega file
  Clicca qui per inserire la tua firma nel messaggio.
Clicca qui per sottoscrivere questa Discussione.
    

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...

Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,07 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000