Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-07-2006, 01:41   #1
Biscazziere
Junior Member
 
Iscritto dal: Sep 2005
Messaggi: 27
[c] Sapere numero di righe di un file di testo

Ciao, leggo le parole che compongono un file di testo con la funzione fscanf, che salta i caratteri tipo a capo e spazio. Come posso fare per sapere a che riga del file mi trovo mentre sto leggendo una parola con fscanf?

Grazie.
Biscazziere è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 08:52   #2
Starise
Senior Member
 
L'Avatar di Starise
 
Iscritto dal: Oct 2000
Città: Napoli
Messaggi: 979
Prova a leggerlo con la funzione fgets. Quando il carattere è uguale a '\n' allora incrementi un contatore di 1. Non è difficile
__________________
Workstation: CPU AMD Ryzen 5900X @ 4900 MHz | RAM Corsair DDR4 64GB @ 3.6GHz | MoBo Gigabyte B550 AORUS Pro V2 | NVMe 1TB ~ WD Black SN850 | Storage 20 TB ~ HGST 7200RPM | PSU Fractal Ion+ 2 860W | GPU AMD Radeon RX 9070 XT | Mouse Logitech G Pro | Tastiera Logitech G915 TKL -- Audio/Video: AVR Denon X1300W 4K | Interfaccia audio Steinberg UR22 MKII | Casse 2x Klipsch RP-160M | Cuffie Sennheiser HD 650 | Mic Oktava MK 012 Black | Display LG OLED 48" @ 2160p 120Hz FreeSync
Starise è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 11:41   #3
Biscazziere
Junior Member
 
Iscritto dal: Sep 2005
Messaggi: 27
il problema è che sono vincolato ad usare fscanf... ho letto che ad esempio scrivendo fscanf(fp, "%[^\n]s", parola) posso evitare/includere dei caratteri tipo lo \n. Non c'è modo di fare leggere a fscanf anche gli a capo invece di saltarli? Oppure di usare una compinazione di fscanf e quanlche altra funzione

Ultima modifica di Biscazziere : 17-07-2006 alle 11:53.
Biscazziere è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 14:43   #4
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da Biscazziere
il problema è che sono vincolato ad usare fscanf... ho letto che ad esempio scrivendo fscanf(fp, "%[^\n]s", parola) posso evitare/includere dei caratteri tipo lo \n. Non c'è modo di fare leggere a fscanf anche gli a capo invece di saltarli? Oppure di usare una compinazione di fscanf e quanlche altra funzione
la fscanf ?
non l'hanno ancora eliminata ?
Ti posso solo consigliare di contare i \n ad ogni fscaneffata ...
__________________
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 17-07-2006, 15:07   #5
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Biscazziere
il problema è che sono vincolato ad usare fscanf...
allora l'esercizio non si può fare perché non sai quanto spazio allocare per il buffer

Quote:
Non c'è modo di fare leggere a fscanf anche gli a capo invece di saltarli? Oppure di usare una compinazione di fscanf e quanlche altra funzione
fai una fscanf a vuoto e usa fread
leggi con fread a blocchi di 4 kb e analizza i blocchi byte per byte; ad ogni \n che trovi incrementi il contatore.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 15:09   #6
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da 71104
allora l'esercizio non si può fare perché non sai quanto spazio allocare per il buffer
mi correggo: puoi allocare uno spazio equivalente alla dimensione del file
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 15:10   #7
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da 71104
mi correggo: puoi allocare uno spazio equivalente alla dimensione del file
mi correggo nuovamente: non puoi perché dopo che hai allocato il buffer un altro processo potrebbe ingrandire il file scrivendoci un'unica linea lunga il doppio delle dimensioni precedenti

LOL, ma questo Linux fa acqua da tutte le parti
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 15:13   #8
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da 71104
LOL, ma questo Linux fa acqua da tutte le parti
ma neanche Linux, diciamo proprio Unix

ma vabbè, porello... è vecchio di decenni ormai...
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 15:18   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
bah, io mi sto ancora sinceramente chiedendo chi ha scritto i prototipi delle funzioni Unix come c***o pensava che avrebbero dovuto fare i programmatori a sapere le dimensioni dei buffer
mi piacerebbe tanto conoscere la risposta... praticamente quelle funzioni sono inutilizzabili
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 15:48   #10
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da 71104
ma neanche Linux, diciamo proprio Unix

ma vabbè, porello... è vecchio di decenni ormai...
Che centrano unix e linux? Con C avresti gli stessi problemi su qualsiasi sistema operativo.

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 16:02   #11
Biscazziere
Junior Member
 
Iscritto dal: Sep 2005
Messaggi: 27
Dunque, io leggo le varie parole del file di testo così:

fscanf(fp, "%s", parola);

per quanto ne so la fscanf elimina automaticamente gli spazi e gli a capo, quindi non vengono letti gli spazi e gli a capo e non ho modo di verificare quando è stato letto un a capo. Non c'è modo con la fscanf di far leggere gli a capo e di metterli al fondo della stringa "parola", in modo poi da poter verificare?

Cosa significa "fare una fscanf a vuoto e poi usare fread?"
Biscazziere è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 16:16   #12
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da Biscazziere
per quanto ne so la fscanf elimina automaticamente gli spazi e gli a capo, quindi non vengono letti gli spazi e gli a capo e non ho modo di verificare quando è stato letto un a capo.
'azz é vero! il mio suggerimento va a farsi fottere

Quote:
Originariamente inviato da Biscazziere
Non c'è modo con la fscanf di far leggere gli a capo e di metterli al fondo della stringa "parola", in modo poi da poter verificare?
che io sappia no ...

Quote:
Originariamente inviato da Biscazziere
Cosa significa "fare una fscanf a vuoto e poi usare fread?"
suppongo fare un fscanf per rispettare le regole dell'esercizio e poi fai come pare a te
__________________
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 17-07-2006, 16:24   #13
Biscazziere
Junior Member
 
Iscritto dal: Sep 2005
Messaggi: 27
su un sito ho trovato una sintassi del genere, c'è scritto che serve per modificare quello che viene letto dalla fscanf:

fscanf(fp, "%[^\n]s", parola);

Non ho trovato molte spiegazioni, qualcuno ne sa qualcosa?

Posso usare insieme alla fscanf qualche altra funzione tipo fgetc? Avevo provato solo che usando anche fgetc mi si sballava il punto a cui era arrivato il file pointer per la fscanf
Biscazziere è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 16:39   #14
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da Biscazziere
su un sito ho trovato una sintassi del genere, c'è scritto che serve per modificare quello che viene letto dalla fscanf:

fscanf(fp, "%[^\n]s", parola);

Non ho trovato molte spiegazioni, qualcuno ne sa qualcosa?

Posso usare insieme alla fscanf qualche altra funzione tipo fgetc? Avevo provato solo che usando anche fgetc mi si sballava il punto a cui era arrivato il file pointer per la fscanf
dal man di fscan
Quote:
... reading input until no more valid input can
be read, or up to the first byte which is not a white-space
character which remains unread.
Secondo me non c'é soluzione con la fscanf.
__________________
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 17-07-2006, 16:43   #15
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
infatti, rassegnati e goditi la possibilità di dire al tuo prof che è niubbo...

Quote:
Originariamente inviato da trallallero
suppongo fare un fscanf per rispettare le regole dell'esercizio e poi fai come pare a te
esatto
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 16:58   #16
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da 71104
infatti, rassegnati e goditi la possibilità di dire al tuo prof che è niubbo...
beato lui, che goduria
__________________
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 17-07-2006, 17:03   #17
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
ASPETTA!
prima di niubbare il tuo prof!

si puó fare:
Codice:
   fscanf(pf, "%c", s );
dove s é comunque una stringa (s[2])
Devi poi analizzare s[0]
Ora vo via spero tu abbia capito

EDIT: ieri con la fretta non ci ho pensato ...
Codice:
   char c;
 ...
   fscanf(pf, "%c", &c );
non serve s[] come stringa ma basta un char singolo e passi alla fscanf l'indirizzo
__________________
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

Ultima modifica di trallallero : 18-07-2006 alle 07:55.
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 17:06   #18
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Biscazziere
su un sito ho trovato una sintassi del genere, c'è scritto che serve per modificare quello che viene letto dalla fscanf:

fscanf(fp, "%[^\n]s", parola);

Non ho trovato molte spiegazioni, qualcuno ne sa qualcosa?
Ciao,
la fscanf() in oggetto e' stata scritta pensando che accetti in ingresso delle espressioni regolari. Non mi risulta che sia possibile, magari si trattava di una libreria non standard, oppure e' una delle tante cose che non conosco.

Certo che avendo a disposizione le espressioni regolari, il tuo programma si ridurrebbe ad una sola linea.

High Flying
Sottovento
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 18:30   #19
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da sottovento
Ciao,
la fscanf() in oggetto e' stata scritta pensando che accetti in ingresso delle espressioni regolari. Non mi risulta che sia possibile, magari si trattava di una libreria non standard, oppure e' una delle tante cose che non conosco.
si che è possibile...

perché come si fa in una sola linea con le espressioni regolari...?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 19:33   #20
Qu@ker
Member
 
Iscritto dal: Apr 2004
Messaggi: 130
Potresti provare con qualcosa di questo tipo:
Codice:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	char c;
	int riga = 0;
	FILE *in;

	
	if (argc != 2)
		return 0;
	in = fopen(argv[1], "r");
	if (in == NULL) {
		perror("fopen()");
		exit(EXIT_FAILURE);
	}
	for (;;) {
		char buffer[256] = {0};
		int result = fscanf(in, "%255[^ \f\n\r\t\v]%c", buffer, &c);

		if (result == EOF)
			break;
		if (result == 2) {
			printf("riga: %d parola: %s\n", riga+1, buffer);
			if (c == '\n')
				++riga;
		} else if (result == 0) {
			if (fscanf(in, "%c", &c) == 1 && c == '\n') {
				printf("riga %d vuota\n", riga+1);
				++riga;
			}
		} else {
			puts("Percepisco una turbolenza nella forza...");
			break;
		}
			
	}
	fclose(in);

	return 0;
}
Qu@ker è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Il MacBook Pro è sempre più...
Il prezzo della Switch 2 potrebbe divent...
TikTok chiarisce il funzionamento della ...
Samsung Galaxy A07 5G: il nuovo entry le...
Realme 16 in arrivo: un mix tra iPhone A...
Domenica di follia su Amazon: iPhone 17 ...
Questo portatile HP OMEN con Core Ultra ...
Robot aspirapolvere al prezzo giusto: le...
Il nuovo M5 Max potrebbe avere una GPU p...
Pulizie automatiche al top (e a prezzo B...
Casa più calda, spese più leggere: Tado ...
Mini PC mostruoso in offerta nascosta su...
Netflix promette 45 giorni di esclusivit...
Gigabyte: un handheld? Sì, ma sol...
Samsung conferma l'arrivo di tre variant...
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: 07:22.


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