Differenze tra le versioni di "Printf ()"

Da Gambas-it.org - Wikipedia.
Riga 4: Riga 4:
  
  
Volendola utilizzare in Gambas, bisognerà dichiararla con Extern, nonché bisognerà dichiarare la libreria di C: libc.so.6, nella quale la funzione è contenuta.
+
Volendola utilizzare in Gambas, bisognerà dichiararla con Extern, nonché bisognerà dichiarare la libreria di C: ''libc.so.6'', nella quale la funzione è contenuta.
  
 
Vanno considerati almeno due casi: uso della funzione ''printf()'' con le stringhe di caratteri, ed uso con valori numerici.
 
Vanno considerati almeno due casi: uso della funzione ''printf()'' con le stringhe di caratteri, ed uso con valori numerici.
Riga 12: Riga 12:
 
Nel caso si debba utilizzare la funzione ''printf()'' con le stringhe di caratteri, ai fini della sua dichiarazione con ''Extern'' in Gambas vanno inoltre considerati due sottocasi:
 
Nel caso si debba utilizzare la funzione ''printf()'' con le stringhe di caratteri, ai fini della sua dichiarazione con ''Extern'' in Gambas vanno inoltre considerati due sottocasi:
  
1) senza uso del parametro di formattazione. In questo caso l'argomento all'interno della funzione ovviamente sarà la sola stringa di caratteri da scrivere in console. Il valore ritornato va dichiarato come tipo ''Puntatore'' e <SPAN style="text-decoration=underline">non</span> di tipo ''stringa'', altrimenti sarà sollevato un errore "''Segmentation fault (11)''".
+
1) senza uso del parametro di formattazione. In questo caso l'argomento all'interno della funzione ovviamente sarà la sola stringa di caratteri da scrivere in console.
 
<BR>La dichiarazione, dunque, sarà:
 
<BR>La dichiarazione, dunque, sarà:
  Private <FONT color=#B22222>Extern printf</font>(testo As String) As Pointer
+
  Private <FONT color=#B22222>Extern printf</font>(testo As String) As Integer
  
  
 
Un esempio pratico:
 
Un esempio pratico:
  Private Extern printf(testo As String) As Pointer
+
  Private Extern printf(testo As String) As Integer In "libc:6"
 
   
 
   
 
   
 
   
Riga 34: Riga 34:
  
  
2) uso del parametro di formattazione. In questo altro caso la funzione ''fprint()'' avrà almeno due argomenti, entrambi di tipo stringa, il primo rappresentato dalla stringa di formattazione, ed il secondo dalla variabile contenente la stringa di caratteri da mostrare in console. Anche in questo caso il valore ritornato va dichiarato come tipo ''Puntatore'' e <SPAN style="text-decoration=underline">non</span> di tipo ''stringa'', altrimenti sarà sollevato un errore "''Segmentation fault (11)''".
+
2) uso del parametro di formattazione. In questo altro caso la funzione ''fprint()'' avrà almeno due argomenti, entrambi di tipo stringa, il primo rappresentato dalla stringa di formattazione, ed il secondo dalla variabile contenente la stringa di caratteri da mostrare in console.
 
<BR>La dichiarazione, dunque, sarà:
 
<BR>La dichiarazione, dunque, sarà:
  Private <FONT color=#B22222>Extern printf</font>(formatt$ as string, var$ As String) As Pointer
+
  Private <FONT color=#B22222>Extern printf</font>(formatt$ as string, var$ As String) As Integer
  
  
 
Un esempio pratico:
 
Un esempio pratico:
  Private Extern printf(formatt$ As String, var$ As String) As Pointer In "libc:6"
+
  Private Extern printf(formatt$ As String, var$ As String) As Integer In "libc:6"
 
   
 
   
 
   
 
   
Riga 60: Riga 60:
  
 
===Uso di ''printf()'' con valori numerici===
 
===Uso di ''printf()'' con valori numerici===
Nel caso si debba utilizzare la funzione ''printf()'' con le stringhe di caratteri, ai fini della sua dichiarazione con ''Extern'' in Gambas il valore di ritorno va dichiarato con il tipo di variabile numerica che si intende ritornare (Byte, Short, Integer, etc.). La funzione, inoltre, avrà due argomenti: uno relativo alla stringa di formattazione, l'altro relativo al valore numerico o alla variabile.
+
La funzione avrà due argomenti: uno relativo alla stringa di formattazione, l'altro relativo al valore numerico o alla variabile contenente detto valore. Tale valore, passato con il secondo argomento della funzione, va dichiarato con il tipo dato di appartenenza (Byte, Short, Integer, etc.).
 
<BR>Per la scrittura del risultato in console (o Terminale) è sufficiente la sola funzione ''printf()''.
 
<BR>Per la scrittura del risultato in console (o Terminale) è sufficiente la sola funzione ''printf()''.
  
 
La dichiarazione dunque, se ad esempio si vuol ritornare un valore di tipo ''Integer'', sarà:
 
La dichiarazione dunque, se ad esempio si vuol ritornare un valore di tipo ''Integer'', sarà:
   Private <FONT color=#B22222>Extern printf</font>(formatt$ As String, numero As Integer) As Integer
+
   Private <FONT color=#B22222>Extern printf</font>($format As String, numero As Integer) As Integer In "libc:6"
  
  
Riga 86: Riga 86:
  
  
Dovendo usare un ''Float'':
+
In quest'altro esempio viene utilizzato un ''Float'' con scrittura nello standard ''output'' della parte intera e dei soli primi tre decimali:
  Private Extern printf(formatt$ As String, fl As Float) As Float In "libc:6"
+
  Private Extern printf($format As String, fl As Float) As Integer In "libc:6"
 
   
 
   
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    
   printf("%lf\n", 11 / 2)
+
   printf("%.3lf\n", 11 / 2)
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 18:21, 2 set 2015

La funzione della libreria di C

int printf(const char *format, ...)

scrive su stdout gli argomenti stringa passati.


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

Vanno considerati almeno due casi: uso della funzione printf() con le stringhe di caratteri, ed uso con valori numerici.


Uso di printf() con le stringhe di caratteri

Nel caso si debba utilizzare la funzione printf() con le stringhe di caratteri, ai fini della sua dichiarazione con Extern in Gambas vanno inoltre considerati due sottocasi:

1) senza uso del parametro di formattazione. In questo caso l'argomento all'interno della funzione ovviamente sarà la sola stringa di caratteri da scrivere in console.
La dichiarazione, dunque, sarà:

Private Extern printf(testo As String) As Integer


Un esempio pratico:

Private Extern printf(testo As String) As Integer In "libc:6"


Public Sub Main()

 Dim testo As String

  testo = "Testo qualsiasi"

  printf(testo)
  
  printf("\nTesto qualsiasi")

End


2) uso del parametro di formattazione. In questo altro caso la funzione fprint() avrà almeno due argomenti, entrambi di tipo stringa, il primo rappresentato dalla stringa di formattazione, ed il secondo dalla variabile contenente la stringa di caratteri da mostrare in console.
La dichiarazione, dunque, sarà:

Private Extern printf(formatt$ as string, var$ As String) As Integer


Un esempio pratico:

Private Extern printf(formatt$ As String, var$ As String) As Integer In "libc:6"


Public Sub Main()

 Dim testo As String

  testo = "Testo qualsiasi"

' Con variabile di tipo stringa contenente il testo:
  printf("%s\n", testo)

' Con testo direttamente espresso:
  printf("%s\n", "Testo qualsiasi")

End


Uso di printf() con valori numerici

La funzione avrà due argomenti: uno relativo alla stringa di formattazione, l'altro relativo al valore numerico o alla variabile contenente detto valore. Tale valore, passato con il secondo argomento della funzione, va dichiarato con il tipo dato di appartenenza (Byte, Short, Integer, etc.).
Per la scrittura del risultato in console (o Terminale) è sufficiente la sola funzione printf().

La dichiarazione dunque, se ad esempio si vuol ritornare un valore di tipo Integer, sarà:

 Private Extern printf($format As String, numero As Integer) As Integer In "libc:6"


Esempio pratico:

Public Sub Main()
 
 printf("%d\n", 4444 + 5555)

End

Se si vuole utilizzare la formattazione esadecimale:

Public Sub Main()

 Dim i, n As Integer

  n = 11
 
  printf("%02X\n", n)

End


In quest'altro esempio viene utilizzato un Float con scrittura nello standard output della parte intera e dei soli primi tre decimali:

Private Extern printf($format As String, fl As Float) As Integer In "libc:6"

Public Sub Main()
 
 printf("%.3lf\n", 11 / 2)

End