Domanda Risolto C. Ho dei dubbi su fgetc, fputc...

Grayfish

Utente Electrum
2 Ottobre 2016
238
96
4
174
Ultima modifica:
Salve, ho dei dubbi relativi all'utilizzo di fgetc e fputc nel linguaggio C.
Se non ho capito male fgetc prende un carattere e lo restituisce come un intero. Ma allora perché funziona anche se la variabile dichiarata è un char, anziché un int?
Mentre rimane ambigua la funzione di fputc rispetto a un putchar.
Grazie in anticipo.

Ho anche notato che quando utilizzo fgetc o fputc devo dichiarare una variabile intero, ma al momento della stampa con printf, nonostante sia un intero, devo ad esempio utilizzare il formato %c e non %d.
 
Se non ho capito male fgetc prende un carattere e lo restituisce come un intero. Ma allora perché funziona anche se la variabile dichiarata è un char, anziché un int?
No, fgetc prende un "pointer to a FILE object that identifies an input stream", legge un carattere da quel file e "On success, the character read is returned (promoted to an int value). The return type is int to accommodate for the special value EOF, which indicates failure".

Gli int vengono implicitamente convertiti in char, "unlike the promotions, numeric conversions may change the values, with potential loss of precision". Per lo stesso motivo 0 viene convertito in false e qualsiasi altro int viene convertito in true.

Mentre rimane ambigua la funzione di fputc rispetto a un putchar.
La funzione fputc prende un carattere e un puntatore a FILE, mentre la funzione putchar prende un carattere e usa stdout per l'output.

Ho anche notato che quando utilizzo fgetc o fputc devo dichiarare una variabile intero, ma al momento della stampa con printf, nonostante sia un intero, devo ad esempio utilizzare il formato %c e non %d.
Quelle lettere con la percentuale non sono altro che stringhe utilizzate da diverse funzioni (e.g. printf) che servono per effettuare una formattazione. Le variabili char contengono di fatto un numero nel range [0, 255], se tu vuoi stampare a schermo la rappresentazione ASCII la printf ti dice che devi usare %c, ad esempio printf("%c", 65); stampa la lettera A. Per farti un altro esempio, se l'utente inserisce 2 ad una scanf("%d", var); sta assegnando il numero 2 alla variabile var, mentre se avessimo scritto scanf("%c", var); gli sta assegnando il numero 50 (valore ASCII del carattere 2).
 
No, fgetc prende un "pointer to a FILE object that identifies an input stream", legge un carattere da quel file e "On success, the character read is returned (promoted to an int value). The return type is int to accommodate for the special value EOF, which indicates failure".

Gli int vengono implicitamente convertiti in char, "unlike the promotions, numeric conversions may change the values, with potential loss of precision". Per lo stesso motivo 0 viene convertito in false e qualsiasi altro int viene convertito in true.


La funzione fputc prende un carattere e un puntatore a FILE, mentre la funzione putchar prende un carattere e usa stdout per l'output.


Quelle lettere con la percentuale non sono altro che stringhe utilizzate da diverse funzioni (e.g. printf) che servono per effettuare una formattazione. Le variabili char contengono di fatto un numero nel range [0, 255], se tu vuoi stampare a schermo la rappresentazione ASCII la printf ti dice che devi usare %c, ad esempio printf("%c", 65); stampa la lettera A. Per farti un altro esempio, se l'utente inserisce 2 ad una scanf("%d", var); sta assegnando il numero 2 alla variabile var, mentre se avessimo scritto scanf("%c", var); gli sta assegnando il numero 50 (valore ASCII del carattere 2).
Grazie mille