Differenze tra le versioni di "Scanf()"

Da Gambas-it.org - Wikipedia.
Riga 12: Riga 12:
  
 
Volendola utilizzare in Gambas, bisognerà dichiararla con ''Extern'', nonché dichiarare la libreria di C: ''libc.so.6'', nella quale la funzione è contenuta:
 
Volendola utilizzare in Gambas, bisognerà dichiararla con ''Extern'', nonché dichiarare la libreria di C: ''libc.so.6'', nella quale la funzione è contenuta:
  Private <FONT color=#B22222>Extern scanf</font>(formato As String, argom As Pointer<FONT Color=gray>, [qui altri eventuali parametri As Pointer]</font>) As Integer In "<FONT color=#B22222>libc:6</font>"
+
  Private <FONT color=#B22222>Extern scanf</font>(__format As String, argom As Pointer<FONT Color=gray>, [qui altri eventuali parametri As Pointer]</font>) As Integer In "<FONT color=#B22222>libc:6</font>"
  
  
Riga 19: Riga 19:
 
  <FONT Color=gray>' ''int scanf (const char *__restrict __format, ...)''
 
  <FONT Color=gray>' ''int scanf (const char *__restrict __format, ...)''
 
  ' ''Read formatted input from stdin.''</font>
 
  ' ''Read formatted input from stdin.''</font>
  Private Extern <FONT color=#B22222>scanf</font>(formato As String, argom As Pointer) As Integer In "<FONT color=#B22222>libc:6</font>"
+
  Private Extern <FONT color=#B22222>scanf</font>(__format As String, argom As Pointer) As Integer In "<FONT color=#B22222>libc:6</font>"
 
    
 
    
 
   
 
   
Riga 26: Riga 26:
 
   Dim p As Pointer
 
   Dim p As Pointer
 
   
 
   
   p = Alloc(16)
+
   p = Alloc(SizeOf(gb.Pointer), 1)
 
  scanf("%s", p)
 
  If p = 0 Then Error.Raise("Errore di lettura dell'input !")
 
 
   
 
   
 +
  <FONT color=#B22222>scanf</font>("%s", p)
 +
 
 
   <FONT Color=gray>' ''Viene restituita una stringa:''</font>
 
   <FONT Color=gray>' ''Viene restituita una stringa:''</font>
 
   Print String@(p)
 
   Print String@(p)
Riga 43: Riga 42:
 
  <FONT Color=gray>' ''int scanf (const char *__restrict __format, ...)''
 
  <FONT Color=gray>' ''int scanf (const char *__restrict __format, ...)''
 
  ' ''Read formatted input from stdin.''</font>
 
  ' ''Read formatted input from stdin.''</font>
  Private Extern <FONT color=#B22222>scanf</font>(formato As String, argom1 As Pointer, argom2 As Pointer) As Integer In "<FONT color=#B22222>libc:6</font>"
+
  Private Extern <FONT color=#B22222>scanf</font>(__format As String, argom1 As Pointer, argom2 As Pointer) As Integer In "<FONT color=#B22222>libc:6</font>"
 
    
 
    
 
   
 
   
Riga 50: Riga 49:
 
   Dim p1, p2 As Pointer
 
   Dim p1, p2 As Pointer
 
   
 
   
   p1 = Alloc(16)
+
   p1 = Alloc(SizeOf(gb.Pointer), 1)
 
   
 
   
   p2 = Alloc(16)
+
   p2 = Alloc(SizeOf(gb.Pointer), 1)
 
   
 
   
 
   scanf("%s %s", p1, p2)
 
   scanf("%s %s", p1, p2)
   If p1 = 0 Or p2 = 0 Then Error.Raise("Errore di lettura dell'input !")
+
    
 
 
   Print String@(p1), String@(p2)
 
   Print String@(p1), String@(p2)
 
   
 
   
Riga 70: Riga 68:
 
  <FONT Color=gray>' ''int scanf (const char *__restrict __format, ...)''
 
  <FONT Color=gray>' ''int scanf (const char *__restrict __format, ...)''
 
  ' ''Read formatted input from stdin.''</font>
 
  ' ''Read formatted input from stdin.''</font>
  Private Extern <FONT color=#B22222>scanf</font>(formato As String, argom As Pointer) As Integer In "<FONT color=#B22222>libc:6</font>"
+
  Private Extern <FONT color=#B22222>scanf</font>(__format As String, argom As Pointer) As Integer In "<FONT color=#B22222>libc:6</font>"
 
    
 
    
 
   
 
   
Riga 77: Riga 75:
 
   Dim p As Pointer
 
   Dim p As Pointer
 
   
 
   
   p = Alloc(SizeOf(gb.Integer))
+
   p = Alloc(SizeOf(gb.Integer), 1)
 
    
 
    
 
   scanf("%d", p)
 
   scanf("%d", p)
  If p = 0 Then Error.Raise("Errore di lettura dell'input !")
+
   
 
 
   Print Int@(p)
 
   Print Int@(p)
 
   
 
   
Riga 93: Riga 90:
 
  <FONT Color=gray>' ''int scanf (const char *__restrict __format, ...)''
 
  <FONT Color=gray>' ''int scanf (const char *__restrict __format, ...)''
 
  ' ''Read formatted input from stdin.''</font>
 
  ' ''Read formatted input from stdin.''</font>
  Private Extern <FONT color=#B22222>scanf</font>(formato As String, argom As Pointer) As Integer In "<FONT color=#B22222>libc:6</font>"
+
  Private Extern <FONT color=#B22222>scanf</font>(__format As String, argom As Pointer) As Integer In "<FONT color=#B22222>libc:6</font>"
 
    
 
    
 
   
 
   
Riga 100: Riga 97:
 
   Dim p As Pointer
 
   Dim p As Pointer
 
   
 
   
   p = Alloc(SizeOf(gb.Byte))
+
   p = Alloc(SizeOf(gb.Byte), 1)
 
    
 
    
 
   scanf("%d", p)
 
   scanf("%d", p)
  If p = 0 Then Error.Raise("Errore di lettura dell'input !")
 
 
   
 
   
 
   Print Byte@(p)
 
   Print Byte@(p)

Versione delle 18:16, 30 mar 2018

La funzione della libreria di C

int scanf (const char *__restrict __format, ...)

legge l'input da stdin. Essa consente di inserire dati nello standard input. Il dato inserito e contenuto nel scondo parametro, o in ciascun parametro (se previsti più di uno) diverso dal primo, 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 (diversi dal primo) 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.

La Direttiva di conversione "s" con scanf( ) accetta una stringa di caratteri non comprendente gli spazi: quando viene incontrato uno spazio, la lettura dell'input si arresta. [Nota 1]


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, argom As Pointer, [qui altri eventuali parametri 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, argom As Pointer) As Integer In "libc:6"
 

Public Sub Main()

 Dim p As Pointer

  p = Alloc(SizeOf(gb.Pointer), 1)

  scanf("%s", p)
  
 ' Viene restituita una stringa:
  Print String@(p)

  Free(p)

End


In questo altro esempio si potranno immettere dallo standard Input due (o più) dati separati da uno spazio. [Nota 1]

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

Public Sub Main()

 Dim p1, p2 As Pointer

  p1 = Alloc(SizeOf(gb.Pointer), 1)

  p2 = Alloc(SizeOf(gb.Pointer), 1)

  scanf("%s %s", p1, p2)
  
  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, argom As Pointer) As Integer In "libc:6"
 

Public Sub Main()

 Dim p As Pointer

  p = Alloc(SizeOf(gb.Integer), 1)
 
  scanf("%d", p)
   
  Print Int@(p)

  Free(p)

End


Esempio con un Carattere (tipo Byte)

In questo esempio inseriamo un Carattere (tipo Byte). 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, argom As Pointer) As Integer In "libc:6"
 

Public Sub Main()

 Dim p As Pointer

  p = Alloc(SizeOf(gb.Byte), 1)
 
  scanf("%d", p)

  Print Byte@(p)

  Free(p)

End



Note

[1] Per evitare tale "limite", imposto dal carattere dello "spazio" con la funzione scanf( ), è opportuno utilizzare la funzione esterna fgets( ).