Differenze tra le versioni di "Scanf()"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
 
La funzione della libreria di C
 
La funzione della libreria di C
 
  ''int scanf(const char *format, args ...)''
 
  ''int scanf(const char *format, args ...)''
legge l'input da ''stdin''. Essa consente di inserire dati nello standard input. Il dato inserito e contenuto nel parametro ''args'', o in ciascun parametro (se previsti più di uno), viene restituito formattato in base alla stringa di formattazione ''format''. Per ottenere dunque più dati, distinti fra loro, formattati, bisognerà prevedere un numero di argomenti ''args'' pari al numeri dei dati predetti.  
+
legge l'input da ''stdin''. Essa consente di inserire dati nello standard input. Il dato inserito e contenuto nel parametro ''args'', o in ciascun parametro (se previsti più di uno), viene restituito formattato in base alla stringa di formattazione ''format''. Per ottenere dunque più dati, distinti fra loro, formattati, bisognerà prevedere un numero di argomenti ''args'' pari al numeri dei dati predetti.
 +
<BR>Va precisato che la stringa di formattazione è costituita dal carattere % e da altro carattere in base al tipo di valore immesso nell'input, ed in particolare:
 +
"%c" per ottenere un carattere;
 +
"%d" per ottenere un intero;
 +
"%f" per ottenere un Float;
 +
"%s" per ottenere una stringa (priva di spazi !);
 +
"%p" per ottenere un indirizzo di memoria.
  
  
Riga 8: Riga 14:
  
  
In questo esempio si potrà immettere dallo ''standard Input'' un solo dato, e più in particolare non è possibile inserire due o più caratteri separati da due o più spazi.
+
===Esempio con immissione di una Stringa===
  Private <FONT color=#B22222>Extern scanf</font>(format$ As String, argsP As Pointer) As Integer In "<FONT color=#B22222>libc:6</font>"
+
In questo esempio si potrà immettere dallo ''standard Input'' una stringa, formata da uno o più caratteri, purché priva di spazi. Qualora vengano immessi caratteri separati da caratteri spazio, tutti i caratteri posti alla destra del primo carattere spazio non saranno scritti in console.
 +
<FONT Color=gray>' ''int scanf (const char *__restrict __format, ...)''
 +
' ''Read formatted input from stdin.''</font>
 +
  Private Extern <FONT color=#B22222>scanf</font>(format$ As String, argsP As Pointer) As Integer In "<FONT color=#B22222>libc:6</font>"
 
    
 
    
 
   
 
   
Riga 19: Riga 28:
 
   
 
   
 
   scanf("%s", p)
 
   scanf("%s", p)
   If IsNull(p) Then Error.Raise("Errore di lettura dell'input !")
+
   If p = 0 Then Error.Raise("Errore di lettura dell'input !")
 
   
 
   
 +
  <FONT Color=gray>' ''Viene restituita una stringa:''</font>
 
   Print String@(p)
 
   Print String@(p)
 
   
 
   
Riga 30: Riga 40:
  
 
In questo altro esempio si potranno immettere dallo ''standard Input'' due dati separati da uno spazio.
 
In questo altro esempio si potranno immettere dallo ''standard Input'' due dati separati da uno spazio.
  Private <FONT color=#B22222>Extern scanf</font>(format$ As String, args1_P As Pointer, args2_P As Pointer) As Integer In "<FONT color=#B22222>libc:6</font>"
+
<FONT Color=gray>' ''int scanf (const char *__restrict __format, ...)''
 +
' ''Read formatted input from stdin.''</font>
 +
  Private Extern <FONT color=#B22222>scanf</font>(format$ As String, args1_P As Pointer, args2_P As Pointer) As Integer In "<FONT color=#B22222>libc:6</font>"
 
    
 
    
 
   
 
   
Riga 42: Riga 54:
 
   
 
   
 
   scanf("%s %s", p1, p2)
 
   scanf("%s %s", p1, p2)
   If IsNull(p1) Or IsNull(p2) Then Error.Raise("Errore di lettura dell'input !")
+
   If p1 = 0 Or p2 = 0 Then Error.Raise("Errore di lettura dell'input !")
 
   
 
   
   Print String@(p1);; String@(p2)
+
   Print String@(p1), String@(p2)
 
   
 
   
 
   Free(p1)
 
   Free(p1)
 
   Free(p2)
 
   Free(p2)
 +
 +
'''End'''
 +
 +
 +
 +
===Esempio con Intero===
 +
In questo esempio inseriamo un valore numerico intero:
 +
<FONT Color=gray>' ''int scanf (const char *__restrict __format, ...)''
 +
' ''Read formatted input from stdin.''</font>
 +
Private Extern <FONT color=#B22222>scanf</font>(format$ As String, args_P As Pointer) As Integer In "<FONT color=#B22222>libc:6</font>"
 +
 
 +
 +
'''Public''' Sub Main()
 +
 +
  Dim p As Pointer
 +
 +
  p = Alloc(4)
 +
 
 +
  scanf("%d", p)
 +
  If p = 0 Then Error.Raise("Errore di lettura dell'input !")
 +
 +
  Print Int@(p)
 +
 +
  Free(p)
 +
 +
'''End'''
 +
 +
 +
===Esempio con un Carattere===
 +
In questo esempio inseriamo un Carattere. Verrà restituito in console il valore ASCII del carattere immesso:
 +
<FONT Color=gray>' ''int scanf (const char *__restrict __format, ...)''
 +
' ''Read formatted input from stdin.''</font>
 +
Private Extern <FONT color=#B22222>scanf</font>(format$ As String, args_P As Pointer) As Integer In "<FONT color=#B22222>libc:6</font>"
 +
 
 +
 +
'''Public''' Sub Main()
 +
 +
  Dim p As Pointer
 +
 +
  p = Alloc(1)
 +
 
 +
  scanf("%d", p)
 +
  If p = 0 Then Error.Raise("Errore di lettura dell'input !")
 +
 +
  Print Byte@(p)
 +
 +
  Free(p)
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 21:01, 2 mar 2016

La funzione della libreria di C

int scanf(const char *format, args ...)

legge l'input da stdin. Essa consente di inserire dati nello standard input. Il dato inserito e contenuto nel parametro args, o in ciascun parametro (se previsti più di uno), viene restituito formattato in base alla stringa di formattazione format. Per ottenere dunque più dati, distinti fra loro, formattati, bisognerà prevedere un numero di argomenti args pari al numeri dei dati predetti.
Va precisato che la stringa di formattazione è costituita dal carattere % e da altro carattere in base al tipo di valore immesso nell'input, ed in particolare:

"%c" per ottenere un carattere;
"%d" per ottenere un intero;
"%f" per ottenere un Float;
"%s" per ottenere una stringa (priva di spazi !);
"%p" per ottenere un indirizzo di memoria.


Volendola utilizzare in Gambas, bisognerà dichiararla con Extern, nonché dichiarare la libreria di C: libc.so.6, nella quale la funzione è contenuta:

Private Extern scanf(format$ As String, argsP As Pointer, ......) As Integer In "libc:6"


Esempio con immissione di una Stringa

In questo esempio si potrà immettere dallo standard Input una stringa, formata da uno o più caratteri, purché priva di spazi. Qualora vengano immessi caratteri separati da caratteri spazio, tutti i caratteri posti alla destra del primo carattere spazio non saranno scritti in console.

' int scanf (const char *__restrict __format, ...)
' Read formatted input from stdin.
Private Extern scanf(format$ As String, argsP As Pointer) As Integer In "libc:6"
 

Public Sub Main()

 Dim p As Pointer

  p = Alloc(8)

  scanf("%s", p)
  If p = 0 Then Error.Raise("Errore di lettura dell'input !")

 ' Viene restituita una stringa:
  Print String@(p)

  Free(p)

End


In questo altro esempio si potranno immettere dallo standard Input due dati separati da uno spazio.

' int scanf (const char *__restrict __format, ...)
' Read formatted input from stdin.
Private Extern scanf(format$ As String, args1_P As Pointer, args2_P As Pointer) As Integer In "libc:6"
 

Public Sub Main()

 Dim p1, p2 As Pointer

  p1 = Alloc(8)

  p2 = Alloc(8)

  scanf("%s %s", p1, p2)
  If p1 = 0 Or p2 = 0 Then Error.Raise("Errore di lettura dell'input !")

  Print String@(p1), String@(p2)

  Free(p1)
  Free(p2)

End


Esempio con Intero

In questo esempio inseriamo un valore numerico intero:

' int scanf (const char *__restrict __format, ...)
' Read formatted input from stdin.
Private Extern scanf(format$ As String, args_P As Pointer) As Integer In "libc:6"
 

Public Sub Main()

 Dim p As Pointer

  p = Alloc(4)
 
  scanf("%d", p)
  If p = 0 Then Error.Raise("Errore di lettura dell'input !")

  Print Int@(p)

  Free(p)

End


Esempio con un Carattere

In questo esempio inseriamo un Carattere. Verrà restituito in console il valore ASCII del carattere immesso:

' int scanf (const char *__restrict __format, ...)
' Read formatted input from stdin.
Private Extern scanf(format$ As String, args_P As Pointer) As Integer In "libc:6"
 

Public Sub Main()

 Dim p As Pointer

  p = Alloc(1)
 
  scanf("%d", p)
  If p = 0 Then Error.Raise("Errore di lettura dell'input !")

  Print Byte@(p)

  Free(p)

End