Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-09-2004, 18:04   #1
fant3
Senior Member
 
L'Avatar di fant3
 
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1360
[C] Lettura e scrittura di File Testo

Salve ragazzi.
Sto scrivendo un semplice algoritmo ed in esso devo leggere delle stringhe da tastiera, memorizzarle in un file testo e poi ristamparle a video.
Per memorizzare le stringhe ho usato il codice seguente:
-----------------------------------------------------------------------
for(i=0;i<n;i++)
{
printf("Inserisci la stringa numero %d:\n", i+1);
while((ch=getchar()) != EOF)
fprintf(fp,"%c", ch);
}
----------------------------------------------------------------------

Però non riesco a trovare il modo di leggere da questo file. Ho provato in molti modi ma ottengo solo una à. Il file l'ho aperto con il comando a+ in modo da poterci appendere e leggere.
Aspetto vostre illuminazioni...
fant3 è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2004, 18:38   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Fammi capire...ma il file se lo apri con notepad come lo vedi ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2004, 18:39   #3
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
aspè che ci provo anchio dato che devo imparare a leggere i file di testo

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2004, 19:12   #4
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16212
Re: [C] Lettura e scrittura di File Testo

Quote:
Originariamente inviato da fant3
Per memorizzare le stringhe ho usato il codice seguente:
-----------------------------------------------------------------------
for(i=0;i<n;i++)
{
printf("Inserisci la stringa numero %d:\n", i+1);
while((ch=getchar()) != EOF)
fprintf(fp,"%c", ch);
}
----------------------------------------------------------------------
usare una *printf per scrivere un singolo carattere...
Codice:
fputc(ch,fp);
Ah: la fine della riga e' proprio un EOF (Ctrl+D sotto Linux)? Tieni conto che, comunque, quando premi Invio viene inserito un newline, quindi anche questo dovrebbe funzionare:
Codice:
printf("Inserisci la stringa numero %d:\n", i+1);
while (1) {
    fputc(fp,(ch=getchar()));
    if (ch=='\n') break;
}
A proposito: ch e' un char o un int?
Se vuoi potergli assegnare il valore EOF, deve essere int.
Quote:
Però non riesco a trovare il modo di leggere da questo file. Ho provato in molti modi ma ottengo solo una à. Il file l'ho aperto con il comando a+ in modo da poterci appendere e leggere.
Se provi a leggere dal file dopo aver finito di scriverci su, leggi la sua fine.
Esegui una rewind(fp) tra il momento in cui scrivi l'ultimo carattere e quello in cui provi a leggere il file.
Per leggere... beh, guarda che leggere righe di testo di lunghezza arbitraria non e' facile come sembra... puoi stampare tutto il file semplicemente leggendolo un carattere alla volta, e stampando il carattere appena letto.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2004, 19:44   #5
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Io eviterei l'uso di EOF...ma userei feof...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2004, 20:09   #6
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
orca sbaglio qualcosa nella letterura

Codice:
while (!feof(fp)){
		fgets (&x, 1, fp);
		printf ("%c", x);
	}
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2004, 21:08   #7
fant3
Senior Member
 
L'Avatar di fant3
 
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1360
Re: Re: [C] Lettura e scrittura di File Testo

Quote:
Originariamente inviato da Ziosilvio

Codice:
printf("Inserisci la stringa numero %d:\n", i+1);
while (1) {
    fputc(fp,(ch=getchar()));
    if (ch=='\n') break;
}
Allora rispondo con ordine:
>Cionci:
-Se apro il file testo creato ci sono i caratteri che immetto quindi li scrive bene.
-Scusa l'ignoranza ma cosa cambia fra eof e feof?

>ZioSilvio:
-Perchè non usare la fprintf? Che problemi porterebbe?
-ch l'ho dichiarato come intero.
-Nel tuo codice sopra riportato la fputc mi sembra che abbia i parametri al contrario.

Comunque l'esercizio mi chiede di usare le funzioni fscanf, fprintf, getc e putc.
fant3 è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2004, 21:51   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Lo standard prevede di usare feof...e questo vuol dire che il metodo con EOF possa non funzionare con tutti is sitemi operativi...

feof è una funzione... che prende come parametro un FILE * e ritorna un numero diverso da 0 se è stata raggiunta la fine del file...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2004, 21:56   #9
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16212
Re: Re: Re: [C] Lettura e scrittura di File Testo

Quote:
Originariamente inviato da fant3
-Perchè non usare la fprintf? Che problemi porterebbe?
fprintf è una funzione di uso generale, con un codice complesso; fputc è una funzione di uso specifico, con un codice semplice.
Se fai molte chiamate, usare fputc anziché fprintf velocizza il programma.
Quote:
-ch l'ho dichiarato come intero.
Benissimo; vuol dire che hai capito come si usa EOF.
Quote:
-Nel tuo codice sopra riportato la fputc mi sembra che abbia i parametri al contrario.
Vero! Dovrebbe essere:
Codice:
fputc((ch=getchar()),fp);
L'avevo pure ricontrollata due volte nella man page...
Mi sa che sto diventando e
Chiedo scusa.
Quote:
Comunque l'esercizio mi chiede di usare le funzioni fscanf, fprintf, getc e putc.
Ah, allora la tua chiamata a fprintf va bene.
Hai più provato a mettere rewind prima delle fscanf? Dà ancora quell'output strano?
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu

Ultima modifica di Ziosilvio : 06-09-2004 alle 22:03.
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2004, 22:00   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Giusto se apri con a+t: fseek(f, 0, SEEK_SET);
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2004, 22:00   #11
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16212
Quote:
Originariamente inviato da cionci
Lo standard prevede di usare feof...e questo vuol dire che il metodo con EOF possa non funzionare con tutti is sitemi operativi...
OK, ma il K&R dice che fgetc (quindi anche le sue varianti getc e getchar), se incontra la fine del file, restituisce EOF.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2004, 22:03   #12
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16212
Quote:
Originariamente inviato da cionci
Giusto se apri con a+t: fseek(f, 0, SEEK_SET);
Peraltro, sempre il K&R dice che:
Codice:
rewind(fp);
equivale esattamente a:
Codice:
fseek(fp,0L,SEEK_SET);
clearerr(fp);
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2004, 22:42   #13
fant3
Senior Member
 
L'Avatar di fant3
 
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1360
>Cionci:
L'apertura file a+t cosa produce?
Io ho usato la a+.

Per quanto riguarda le scrittura delle stringhe su file va bene poichè il file testo generato riporta quello che digito.
Ora non mi è molto chiaro il funzionamento della fscanf.
Ho provato il seguente codice ma di sicuro c'è qualcosa di sbagliato perchè mi restituisce "!!".
Ah ho inserito rewind fp fra le operazioni di lettura e scrittura ma non è quello il problema...o almeno non solo quello

-------------------------------------------------------------------
for(j=0;j<len;j++)
{
fscanf(fp, "&d", &s);
putchar(s);
}
-------------------------------------------------------------------
s è un intero

con len indico la lunghezza del file, ma ho un dubbio. E' corretto calcolare len in questo modo?

-------------------------------------------------------------------
len=0;
while((ch=getchar()) != EOF)
fprintf(fp,"%c", ch);
len++;
------------------------------------------------------------------

Qualcuno sa dove posso trovare qualche spiegazione sulla scanf perchè ho trovato poco sinora.

Ultima modifica di fant3 : 06-09-2004 alle 22:44.
fant3 è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2004, 00:07   #14
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16212
Quote:
Originariamente inviato da fant3
Ora non mi è molto chiaro il funzionamento della fscanf.
fscanf, il cui prototipo è:
Codice:
int fscanf(FILE *stream, const char *fmt, ...);
prende come argomento un puntatore a file, una stringa di formato, e una sequenza di puntatori.
fscanf(fp,fmt,arg1[,arg2,...]) legge dal file fp una sequenza di caratteri corrispondente alla stringa di formato fmt.
Ogni volta che in fmt c'è una sequenza del tipo "%t", legge la sequenza successiva come se fosse una rappresentazione di un oggetto di tipo t, e lo scrive nella zona di memoria puntata dall'argN corrispondente.
Per esempio:
Codice:
fscanf(stdin,"%d",&n);
legge dallo standard input una sequenza di caratteri che rappresenta un intero in notazione decimale, e lo scrive nella zona di memoria il cui indirizzo è quello della variabile n (in breve, nella variabile n): è il modo più immediato per inizializzare una variabile con un valore scelto dall'utente, anche se spesso non il migliore.
Quote:
Ho provato il seguente codice ma di sicuro c'è qualcosa di sbagliato perchè mi restituisce "!!".
Ah ho inserito rewind fp fra le operazioni di lettura e scrittura ma non è quello il problema...o almeno non solo quello

-------------------------------------------------------------------
for(j=0;j<len;j++)
{
fscanf(fp, "&d", &s);
putchar(s);
}
-------------------------------------------------------------------
s è un intero

con len indico la lunghezza del file, ma ho un dubbio. E' corretto calcolare len in questo modo?

-------------------------------------------------------------------
len=0;
while((ch=getchar()) != EOF)
fprintf(fp,"%c", ch);
len++;
------------------------------------------------------------------
Dunque... se ci fai caso, alla fine del ciclo con getchar, len vale sempre 1.
Devi racchiudere la fprintf e il len++ tra parentesi graffe.
In alternativa, puoi usare la forma idiomatica:
Codice:
 for (len=0; (ch=getchar()) != EOF; len++)
    fprintf(fp,"%c",ch);
La parte con la fscanf contiene una svista e un errore concettuale.
La svista è che i formattatori iniziano con % e non con &: così è come se tu gli avessi chiesto "leggi da fp un carattere & e un carattere d".
L'errore concettuale è che il formattatore %d significa una stringa che rappresenta un numero intero in notazione decimale, quindi una fscanf(pf,"%d",&s) comincia a leggere da fp un carattere dopo l'altro finché:
- o incontra una lettera, e allora capisce che c'è qualcosa che non va, rimette l'ultimo carattere letto al suo posto nel file, non altera il contenuto di s, e restituisce 0;
- oppure incontra una cifra, nel qual caso continua a leggere finché ci sono cifre, aggiorna il contenuto di s col valore che ha trovato, e restituisce 1.
Se, come ho capito, devi semplicemente stampare il file su schermo, una fscanf come la tua va bene, ma s deve essere di tipo char e il formattatore deve essere %c.
Quote:
Qualcuno sa dove posso trovare qualche spiegazione sulla scanf perchè ho trovato poco sinora.
Su un qualunque buon manuale di linguaggio C, per esempio il Kernighan&Ritchie, oppure il Deitel&Deitel.
E, naturalmente, nel manuale del compilatore (o nelle man pages di Linux).
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu

Ultima modifica di Ziosilvio : 07-09-2004 alle 00:12.
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2004, 00:50   #15
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Il K&R è un po' vecchio come manuale...
Io sinceramente non mi affiderei molto su EOF...poi fate vobis...

Riguardo al mettere la t dopo il modo di apertura (lo puoi fare per qualsiasi modalità):

t sta per text
b sta per binary

Il default è t, ma in teoria è possibile modificare la modalità di apertura di default...quindi se uno vuole essere sicuro è meglio specificare...

Ultima modifica di cionci : 07-09-2004 alle 00:53.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2004, 12:06   #16
fant3
Senior Member
 
L'Avatar di fant3
 
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1360
grazie ZioSilvio per i consigli.
Effettivamente ieri avevo confuso i % con & ed avevo mancato le graffe nel ciclo di scrittura....sarà stata l'ora tarda a farmi sbagliare
Ora va tutto bene, il file viene scritto e letto correttamente.
Visto che l'esercizio vuole il tutto sotto forma di function di tipo void. Ho provato passando cosi':
text(fp, &len, n)
void text(FILE *fp, int *dim, int n)

ma credo sia sbagliato perchè quando provo ad aprire manualmente il file testo c'è quello che scrivo, ma quando eseguo l'algoritmo non legge nulla. Forse sbaglio nel passaggio del file testo vero?

Ultima modifica di fant3 : 07-09-2004 alle 12:08.
fant3 è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2004, 12:29   #17
fant3
Senior Member
 
L'Avatar di fant3
 
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1360
Ok ragazzi ho risolto.

void text(FILE *fp, int *dim, int n)
text(fp, &len, n)

Prima non funzionava perchè non leggeva la lunghezza del file. Ho messo una variabile locale nella funzione che legge la lunghezza e poi alla fine la memorizza nel puntatore da passare al main.
Grazie a tutti per l'aiuto siete stati gentilisismi.
fant3 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
iPhone Fold: scorte limitate al lancio m...
OpenAI porterà la pubblicità in ChatGPT ...
TSMC aumenterà ancora i prezzi: nel 2026...
Marvel pubblica anche il secondo teaser ...
Nuovo accordo tra xAI e il Pentagono: l'...
La famiglia Xiaomi 17 sta per registrare...
Nuove auto elettriche che vedremo sul me...
E-bike illegali, a Verona il più ...
Quali sono i giochi più venduti su Steam...
HONOR sta per lanciare un nuovo smartpho...
Jared Isaacman sarà alla guida de...
Il Tesla Cybertruck non arriverà ...
Xiaomi Watch 5 è ufficiale: architettura...
CD Projekt vende GOG: il co-fondatore Mi...
Il meglio di Amazon in 26 prodotti, aggi...
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: 20:06.


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