Differenze tra le versioni di "Scanf()"
Riga 37: | Riga 37: | ||
'''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. | 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: | ||
+ | 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() | ||
+ | |||
+ | Dim p As Pointer | ||
+ | |||
+ | |||
+ | Shell "gcc -o /tmp/libimm.so " & Application.Path &/ "libimm.c -shared -fPIC" Wait | ||
+ | |||
+ | immetti(VarPtr(p)) | ||
+ | |||
+ | Print String@(p) | ||
+ | |||
+ | '''End''' |
Versione delle 18:35, 6 set 2014
La funzione della libreria di C
int scanf(char *format, args ...)
legge l'input da stdin. Essa consente di inserire dati nello standard inpt.
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.
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:
Private Extern immetti() As String In "/tmp/libimm" Public Sub Main() Dim s As String Shell "gcc -o /tmp/libimm.so " & Application.Path &/ "libimm.c -shared -fPIC" Wait s = immetti() Print s 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:
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() Dim p As Pointer Shell "gcc -o /tmp/libimm.so " & Application.Path &/ "libimm.c -shared -fPIC" Wait immetti(VarPtr(p)) Print String@(p) End