Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - La funzione sscanf...
Forum - C/C++ - La funzione sscanf...

Avatar
Dante (Ex-Member)
Newbie


Messaggi: 3
Iscritto: 27/02/2012

Segnala al moderatore
Postato alle 15:50
Martedì, 28/02/2012
Per cio che ho capito sscanf legge da una stringa"buffer" e memorizza negli argomenti "p.x" e "p.y", si può decidere la formattazione con il secondo parametro.

es:
Codice sorgente - presumibilmente C/C++

  1. char buffer[10];
  2. pnt ps;    /*il tipo punto, e definito in un altro file ha come membri 2 int*/
  3.  
  4. FILE *pfile = fopen(nomefile, "r");              
  5.         fgets(buffer, 10, pfile);
  6. fclose(pfile);
  7.                
  8.         sscanf(buffer, "%i %i", ps.x, ps.y);



tuttavia:
Testo quotato

cc sscanf.c -o sscanf
In file included from main.c:3:0:
sscanf.c: In function ‘cntrslz’:
sscanf.c:15:2: warning: format ‘%i’ expects argument of type ‘int *’, but argument 3 has type ‘int’ [-Wformat]
sscanf.c:15:2: warning: format ‘%i’ expects argument of type ‘int *’, but argument 4 has type ‘int’ [-Wformat]











PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 16:07
Martedì, 28/02/2012
Ciao, ricorda di mettere & nello sscanf cioe' sscanf(buffer, "%d %d",& ps.x, &ps.y);  perchè ha bisogno dell'indirizzo di memoria delle variabili passate come argomento in modo da modificarne il valore.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:24
Martedì, 28/02/2012
E impariamo a leggerli questi messaggi ...

Testo quotato


expects argument of type ‘int *’

... mi aspettavo un puntatore ad int ...

but argument 3 has type ‘int’

... e tu mi hai dato un semplice int ...

... sia per l'argomento 3 che per l'argomento 4.



Quindi devi fornire un puntatore all'intero e non l'intero

sscanf(buffer, "%i %i", &ps.x, &ps.y);








Ultima modifica effettuata da nessuno il 28/02/2012 alle 17:24


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Dante (Ex-Member)
Newbie


Messaggi: 3
Iscritto: 27/02/2012

Segnala al moderatore
Postato alle 18:56
Martedì, 28/02/2012
grazie nessuno, si hai ragione, questa domanda la potevo risparmiare, se ci avessi dedicato un poo piu di attenzione... :hail:

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:14
Martedì, 28/02/2012
Testo quotato

Postato originariamente da Dante:

grazie nessuno, si hai ragione, questa domanda la potevo risparmiare, se ci avessi dedicato un poo piu di attenzione... :hail:



Più che altro, se vuoi imparare, devi tentare di chiedere al forum solo quando non sei riuscito - dopo vari tentativi e giorni di riflessione e prove - a risolvere da solo.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote