Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
MSI FORGE GK600 TKL WIRELESS: switch lineari hot-swap, tripla connettività, display LCD e 5 strati di fonoassorbimento. Ottima in gaming, a 79,99 euro
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI porta un importante aggiornamento alla sua linea di gimbal camera tascabili con Osmo Pocket 4: sensore CMOS da 1 pollice rinnovato, gamma dinamica a 14 stop, profilo colore D-Log a 10 bit, slow motion a 4K/240fps e 107 GB di archiviazione integrata. Un prodotto pensato per i creator avanzati, ma che convince anche per l'uso quotidiano
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 15-06-2006, 14:27   #1
scarface7
Junior Member
 
Iscritto dal: Apr 2006
Messaggi: 15
[C] caricamento elenco da file

salve ragazzi,
avrei una cosa da chiedervi:
devo fare un programma che mi carichi un elenco di auto da file con la seguente sintassi:
!marca!modello!prezzo!

ho creato la seguente funzione:

int carica(FILE *f,automobile el[])

{
int i,k;

for(i=0;!feof(f);i++){


for(k=0;(el[i].marca[k]=fgetc(f))!='!';k++);
el[i].marca[k]='\0';
for(k=0;((el[i].modello[k]=fgetc(f))!='!')&&!feof(f);k++);
el[i].modello[k]='\0';
fscanf(f,"%f \n ",&(el[i].prezzo));
}

return i;

}


vorrei chiedervi come devo fare per far caricare anche il primo punto esclamativo !...?

riesco solo a caricare marca,modello e prezzo,ma a causa del mancato caricamento del primo punto esclamativo a video l'elenco mi compare molto male..

ringrazio anticipatamente per le vostre risposte...
scarface7 è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2006, 14:41   #2
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
non fai prima con
Codice:
fscanf("!%s!%s!%f!", el[i].marca, el[i].modello, &el[i].prezzo);
?
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2006, 12:25   #3
scarface7
Junior Member
 
Iscritto dal: Apr 2006
Messaggi: 15
no non mi carica nulla se faccio come dici tu...

chi altro saprebbe darmi un aiuto..per piacere
scarface7 è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2006, 13:11   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da scarface7
chi altro saprebbe darmi un aiuto..per piacere
Potresti magari postare la dichiarazione della struttura automobile??
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2006, 14:09   #5
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da scarface7
no non mi carica nulla se faccio come dici tu...
perche' ci sono i ! dentro il file

prova cosi':
Codice:
int carica(FILE *f,automobile el[]) 
{
   int i,k;

   for(i = 0; !feof(f); i++ )
   {
      el[i].marca[0] = fgetc(f);
      for( k = 1; (el[i].marca[k] = fgetc(f)) != '!'; k++ )
         ;   
      el[i].marca[k] = '\0';

      el[i].modello[0] = fgetc(f);
      for( k = 1; ((el[i].modello[k] = fgetc(f)) != '!' ) && !feof(f); k++ )
         ;
      el[i].modello[k]='\0';


      el[i].prezzo = '!';
      fscanf( f, "%f \n ",&(el[i].prezzo+1));
   }
   return i;
}
scusa se ho reindentato ma era per capire ... non posso sdeindentarlo dopo

in pratica leggi il primo carattere (!) e il ciclo parte da 1 anziche da 0

non so se ci sono errori non ho compilato e controllato bene. Comunque non e' un bel sistema, per me, per gestire records su file
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2006, 14:47   #6
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Mi sa che:
Codice:
   el[i].modello[0] = fgetc(f);
la devi sostituire con:
Codice:
   el[i].modello[0] = '!';
perche' il char '!' l'ha gia' letto ed e' quello che fa interrompere il ciclo precedente.

Comunque ti consiglio records a lunghezza fissa.
In C gia' e' dura stare attenti a tutto, se ti complichi la vita
non ti passa piu'

poi leggi/scrivi interi blocchi con fread(..) e fwrite(...)
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2006, 18:04   #7
scarface7
Junior Member
 
Iscritto dal: Apr 2006
Messaggi: 15
grazie..comunque non uso fread e fwrite perchè non rientrano nel programma.ora provo un pò e ti faccio sapere..
scarface7 è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2006, 18:08   #8
scarface7
Junior Member
 
Iscritto dal: Apr 2006
Messaggi: 15
niente ancora..neanche il tuo codice funziona..

vi copio il file txt da leggere:

8
!Opel!Astra!18000.00!
!Fiat!Punto!13500.00!
!Audi!A4!32000.00!
!Renault!Megane!22999.99!
!Fiat!Punto!13500.00!
!Opel!Corsa!12300.00!
!Alfa Romeo!147!29999.99!
!Citroen!C3!14850.00!
!Fiat!Multipla!15550.00!
scarface7 è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2006, 18:21   #9
scarface7
Junior Member
 
Iscritto dal: Apr 2006
Messaggi: 15
codice e schermata a video

allora vi posto prima il codice della mia funzione e poi cosa mi compare a video:

CODICE:

int carica(FILE *f,automobile el[])

{
int i,k,n;
fscanf(f,"%d",&n);

for(i=0;!feof(f);i++){
fscanf(f,"!");
for(k=0;(el[i].marca[k]=fgetc(f))!='!';k++);
el[i].marca[k]='\0';
for(k=0;((el[i].modello[k]=fgetc(f))!='!')&&!feof(f);k++);
el[i].modello[k]='\0';
fscanf(f,"%f!\n",&(el[i].prezzo));

}

return i;

}

SCHERMATA A VIDEO:

digitare il nome del file da caricare: auto.txt
sono stati caricati 10 record dal file auto.txt
Premere un tasto per continuare . . .
visualizzazione dell'elenco a video:

!Opel!0.00
Astra!18000.00!0.00
Fiat!Punto!13500.00
Audi!A4!32000.00
Renault!Megane!22999.99
Fiat!Punto!13500.00
Opel!Corsa!12300.00
Alfa Romeo!147!29999.99
Citroen!C3!14850.00
Fiat!Multipla!15550.00
Premere un tasto per continuare . . .


potreste gentilmente correggere il mio errore..grazie
scarface7 è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2006, 20:11   #10
Qu@ker
Member
 
Iscritto dal: Apr 2004
Messaggi: 130
Giusto per darti un suggerimento:
Codice:
#include <stdio.h>

typedef struct _elem {
	char marca[16];
	char modello[16];
	float prezzo;
} elem;

int main()
{
	elem el[10];
	int i, j, dummy;
	FILE *in = fopen("auto.txt", "r");
	fscanf(in, "%d", &dummy);
	printf("Letto: %d\n", dummy);
	i = 0;
	while (fscanf(in, " !%[^!]!%[^!]!%f!",
			  el[i].marca, el[i].modello,
                          &el[i].prezzo) == 3)
		++i;
	fclose(in);
	printf("Caricati %d record\n\n", i);

	puts("   marca  |  modello |  prezzo  |");
	puts("---------------------------------");
	for (j = 0; j < i; ++j) {
		printf("%10s %10s\t%.2f\n", 
		       el[j].marca, el[j].modello,
                       el[j].prezzo);
	}

	return 0;
}
Codice:
goku@big:/tmp$ ./leggifile
Letto: 8
Caricati 9 record

   marca  |  modello |  prezzo  |
---------------------------------
      Opel      Astra   18000.00
      Fiat      Punto   13500.00
      Audi         A4   32000.00
   Renault     Megane   22999.99
      Fiat      Punto   13500.00
      Opel      Corsa   12300.00
Alfa Romeo        147   29999.99
   Citroen         C3   14850.00
      Fiat   Multipla   15550.00
goku@big:/tmp$
Qu@ker è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless Tastiera gaming MSI GK600 TKL: switch hot-swap, ...
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
Spento lo strumento LECP della sonda spa...
Voyager Technologies ha siglato un accor...
GoPro annuncia la linea MISSION 1 con tr...
Alcune varianti dei futuri Samsung Galax...
Il ridimensionamento di OnePlus in Europ...
Il cofondatore di Netflix ha lasciato l'...
ASUS porta in Italia il nuovo Zenbook Du...
Assassin's Creed: Black Flag Resynced, s...
Xbox Game Pass cambierà: tra le n...
I nuovi Surface Pro e Laptop sono vicini...
OnePlus ci riprova con la fascia bassa: ...
La Top 10 delle offerte Amazon del weeke...
XGIMI MoGo 2 Pro a 339€: Google TV con N...
Forum IT & Intelligence 2026: dall'A...
iPhone 16e per la prima volta a meno di ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:37.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v