Quale funzione scanf in c restituisce?

So che è la firma

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

A cosa è correlato questo valore int?

Dalla pagina man :

 NAME scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf ... RETURN VALUE These functions return the number of input items successfully matched and assigned, which can be fewer than provided for, or even zero in the event of an early matching failure. The value EOF is returned if the end of input is reached before either the first successful conversion or a matching failure occurs. EOF is also returned if a read error occurs, in which case the error indicator for the stream (see ferror(3)) is set, and errno is set indicate the error. 

Nel tuo caso, scanf() può restituire 0 , 1 o EOF .

PS Come altri hanno sottolineato, ti manca una e commerciale di fronte a g :

 int p=scanf("%d",&g); 

Senza la e commerciale, il comportamento del tuo codice non è definito.

Da scanf :

In caso di successo, la funzione restituisce il numero di elementi letti correttamente. Questo conteggio può corrispondere al numero previsto di letture o meno, anche a zero, se si verifica un errore corrispondente. Nel caso di un errore di input prima che qualsiasi dato possa essere letto correttamente, viene restituito EOF.

Tecnicamente questo è UB (comportamento non definito).

 int g; int p=scanf("%d",g); ^ 

Si passa un intero unitializzato a scanf per usarlo come indirizzo in cui scrivere. Da questo momento in poi, può succedere di tutto. Molto probabilmente la tua app si arresta in modo anomalo.

restituirà 1 come scanf restituisce il numero di elementi letti correttamente

Penso che il tuo codice non funzioni correttamente perché dimentichi il “&” nella funzione scanf ..

 int g=0; //init the variable int p=scanf("%d",&g); 

la funzione scanf inserirà il valore inserito nell’indirizzo variabile g.

Qualunque cosa tu fornisca l’input VDU passa alla variabile g e se letto correttamente, p uguale a 1.