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(char *format, args ...)''
+
  ''int scanf(const char *format, args ...)''
legge l'input da ''stdin''. Essa consente di inserire dati nello standard inpt.
+
legge l'input da ''stdin''. Essa consente di inserire dati nello standard input. Il dato inserito e contenuto nel/nei parametro/i ''args'' 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.  
  
  
Se il programmatore vuole utilizzare la funzione ''scanf()'' per immettere ''una'' parola, dovrà utilizzarla all'interno di una libreria esterna specifica da lui creata, come segue.
+
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>(format$ As String, argsP As Pointer) As Integer In "<FONT color=#B22222>libc:6</font>"
  
La libreria esterna specifica, il cui file di codice sorgente sarà chiamato ad esempio ''libimm.c'', può essere:
 
#include <stdio.h>
 
 
 
char s;
 
 
char * immetti() {
 
 
  scanf("%s", &s);
 
 
    return (&s);
 
}
 
e verrà posta ad esempio nella cartella "''Dati''" dell'applicativo.
 
  
Il codice Gambas potrà essere:
+
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.
  Private Extern immetti() As String In "/tmp/libimm"
+
  Private <FONT color=#B22222>Extern scanf</font>(format$ As String, argsP As Pointer) As Integer In "<FONT color=#B22222>libc:6</font>"
+
 
 
   
 
   
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
   Dim s As String
+
   Dim p As Pointer
 
   
 
   
 +
  p = Alloc(8)
 
   
 
   
   Shell "gcc -o /tmp/libimm.so " & Application.Path &/ "libimm.c -shared -fPIC" Wait
+
   scanf("%s", p)
 +
  If IsNull(p) Then Error.Raise("Errore di lettura dell'input !")
 
   
 
   
   s = immetti()
+
   Print String@(p)
 
   
 
   
   Print s
+
   Free(p)
 
   
 
   
 
  '''End'''
 
  '''End'''
La parola da immettere potrà essere inserita dalla console dell'IDE di Gambas, oppure - se creato l'eseguibile ''.gambas'' - dal Terminale ove sarà stato lanciato. In caso di uso dell'applicativo da Terminale, dopo aver creato l'eseguibile ''.gambas'', la libreria esterna da noi creata va posta al di fuori dell'applicativo e, nell'esempio fatto, nel medesimo percorso dell'applicativo.
 
  
  
===Raccogliere il valore stringa da un parametro della funzione chiamante di Gambas===
 
Se si intende raccogliere il valore stringa da un parametro della funzione chiamante di Gambas, i codici saranno i seguenti.
 
  
Il codice della libreria da noi creata:
+
In questo altro esempio si potranno immettere dallo ''standard Input'' due dati separati da uno spazio.
  #include <stdio.h>
+
  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>"
 
 
char s;
 
 
void immetti(char * t[]) {
 
 
  scanf("%s", &s);
 
 
    
 
    
  *t = &s;
 
 
 
}
 
 
 
Il codice Gambas:
 
Private Extern immetti(po As Pointer) In "/tmp/libimm"
 
 
   
 
   
 +
'''Public''' Sub Main()
 
   
 
   
'''Public''' Sub Main()
+
  Dim p1, p2 As Pointer
 
   
 
   
  Dim p As Pointer
+
  p1 = Alloc(8)
 
   
 
   
 +
  p2 = Alloc(8)
 
   
 
   
   Shell "gcc -o /tmp/libimm.so " & Application.Path &/ "libimm.c -shared -fPIC" Wait
+
   scanf("%s %s", p1, p2)
 +
  If IsNull(p1) Or IsNull(p2) Then Error.Raise("Errore di lettura dell'input !")
 
   
 
   
   immetti(VarPtr(p))
+
   Print String@(p1);; String@(p2)
 
   
 
   
   Print String@(p)
+
   Free(p1)
 +
  Free(p2)
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 07:19, 2 set 2015

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/nei parametro/i args 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.


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"


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.

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 IsNull(p) Then Error.Raise("Errore di lettura dell'input !")

  Print String@(p)

  Free(p)

End


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

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 IsNull(p1) Or IsNull(p2) Then Error.Raise("Errore di lettura dell'input !")

  Print String@(p1);; String@(p2)

  Free(p1)
  Free(p2)

End