TIPO VARIABILE

di il
18 risposte

TIPO VARIABILE

Buongiorno ragazzi,

sono nuovo del forum e da poco mi sto approcciando alla programmazione in c , sto seguendo una guida che a un certo punto spiega il getchar e mi riporta questo esempio:


#include <stdio.h>
main()
{
int ch, i = 0;
while((ch = getchar()) != EOF) i++;
printf("%d \n", i);
}

Ciò che non mi è chiaro è perchè la variabile ch è tipizzata come un int. Il programma funziona , inizialmente non mi spiegavo perchè il getchar funzionasse se la variabile a cui è assegnato è un int ma poi ho pensato che quel valore anche se immagazzinato in ch non viene poi utilizzato nel programma (in ogni caso non capisco perchè non tipizzarla come char).

Anzi in verità non capisco perchè assegnare il valore di getchar a ch dato che quel valore non lo utilizzeremo per altro.

18 Risposte

  • Re: TIPO VARIABILE

    Consiglio, cambia guida

    Innanzitutto lo standard C specifica che il tipo di ritorno del main deve essere esplicito (ed essere int).
    Correttamente è, quindi: [CODE] int main(void) { } È corretta l’osservazione che la variabile ch è inutile, ma il tipo è giustamente int.
    getchar() infatti non ritorna un char bensì un int, poiché deve contenere tutti i valori di un char + EOF
  • Re: TIPO VARIABILE

    Scusa, ma quando ti fai questo tipo di domande, prima dovresti leggere la documentazione della funzione.

    Per la getchar avrai

    http://www.cplusplus.com/reference/cstdio/getchar

    ovvero

    int getchar ( void );
  • Re: TIPO VARIABILE

    _Achille ha scritto:


    Consiglio, cambia guida

    Innanzitutto lo standard C specifica che il tipo di ritorno del main deve essere esplicito (ed essere int).
    Correttamente è, quindi: [CODE] int main(void) { } È corretta l’osservazione che la variabile ch è inutile, ma il tipo è giustamente int.
    getchar() infatti non ritorna un char bensì un int, poiché deve contenere tutti i valori di un char + EOF
    Grazie per la risposta, colgo l'occasione per chiederti se conosci qualche corso/guida che consiglieresti sul c.
  • Re: TIPO VARIABILE

    C è un linguaggio molto vecchio e ormai è difficile trovare libri per beginner aggiornati all’ultimo standard (C11/C18).
    Quindi non ho nulla da consigliarti riguardo C.
  • Re: TIPO VARIABILE

    A questo livello di domande sempre K&R per cominciare
  • Re: TIPO VARIABILE

    1) il C NON E' un linguaggio ""molto vecchio". Solo gli sciocchi possono considerare ""vecchio"" un linguaggio che e' alla base del 90% del software di sistema attualmente in circolazione.
    2) i libri ""seri" NON DURANO 6 mesi o un anno, ma DECINE d'anni. C'e' ne sono diversi ANCORA VALIDI dopo 2000 anni!

    La ""bibbia"" per il C e' "Kernighan and Ritchie The C Programming Language".
  • Re: TIPO VARIABILE

    migliorabile ha scritto:


    1) il C NON E' un linguaggio ""molto vecchio". Solo gli sciocchi possono considerare ""vecchio"" un linguaggio che e' alla base del 90% del software di sistema attualmente in circolazione.
    2) i libri ""seri" NON DURANO 6 mesi o un anno, ma DECINE d'anni. C'e' ne sono diversi ANCORA VALIDI dopo 2000 anni!

    La ""bibbia"" per il C e' "Kernighan and Ritchie The C Programming Language".
    Ma assolutamente no.

    C è un linguaggio vecchio. Affermare il contrario significa mentire a sé stessi.
    Vecchio non significa però non mantenuto e aggiornato, infatti l’ultima ISO è la C18 (o comunque la C11).

    La maggior parte dei libri, guide, corsi ecc… riguardano però C89 o addirittura pre-ISO.
    Basta vedere quanti vengono sui forum e scrivono cose come [CODE] main() { } o [CODE] void main() { } Quanti di questi libri, corsi ecc… introducono _Bool invece di usare 1 e 0? E stiamo parlando di C99, nemmeno C11…
    Per non parlare di gets.

    Questi libri rimarranno pure “VALIDI”, ma diventano obsoleti in quanto insegnano pratiche ormai scorrette
  • Re: TIPO VARIABILE

    Mah... diciamo che le "pratiche scorrette" non son certo queste sciocchezzuole.
    Il linguaggio è vecchio, senza dubbio.
    Ma è usatissimo.
    Anche l'italiano o l'inglese sono vecchi
  • Re: TIPO VARIABILE

    +m2+ ha scritto:


    Mah... diciamo che le "pratiche scorrette" non son certo queste sciocchezzuole.
    Il linguaggio è vecchio, senza dubbio.
    Ma è usatissimo.
    Anche l'italiano o l'inglese sono vecchi
    Il codice non è portabile, non sono sciocchezze.
    Se delle procedure vengono deprecate un motivo vi è.

    E per quanto riguarda l’italiano, di certo non consigli un dizionario del 1300
  • Re: TIPO VARIABILE

    @_Achille, sei giovane, quindi ti e' permesso dire una QUANTITA' LIMITATA di sciocchezze, MA NON ESAGERARE.

    Ti stai impuntando su aspetti ASSOLUTAMENTE MARGINALI del linguaggio.



    Tutte le estensioni indicate, sono comode, ripuliscono il linguaggio, ma CERTAMENTE NON LO STRAVOLGONO e sono SOLO una ufficializzazione di BUONE PRATICHE DI PROGRAMMAZIONE e librerie standard di fatto, che QUALUNQUE BUON PROGRAMMATORE segue/usa gia' da tempo.

    Come si dice dalle mie parti:

    tass pisulat, lassa parlar tu mare che l'e' piu' vecia

    Il codice non e' portabile se uno NON SA SCRIVERE codice portabile.

    Inoltre, il linguaggio di programmazione E' UNO STRUMENTO, NON lo scopo del programmatore, ed e' UNO (strumento) TRA TANTI.
    Non serve a nulla conoscere tutti gli infinitesimi dettagli di un lingaggio di programmazione, a meno che uno non PROGETTI LINGUAGGI DI PROGRAMMAZIONE.

    Quello che serve e' SAPER CONVERTIRE il prolema da risolvere in forma di codice MANTENIBILE/CHIARO/EFFICIENTE/MODULARE/ESTENDIBILE.
  • Re: TIPO VARIABILE

    _Achille ha scritto:


    Il codice non è portabile, non sono sciocchezze.
    Il codice non è praticamente mai portabile, a meno non si tratti di programmini didattici o robettina simile.
    A meno di non darci sotto di ifdef
  • Re: TIPO VARIABILE

    Piu' dettagliatamente: MAI PORTABILE, QUALUNQUE sia il linguaggio di programmazione usato!
  • Re: TIPO VARIABILE

    La domanda dell’OP era La mia risposta è stata:
    No, (personalmente) non ritengo valido spendere soldi (si parla sempre di 40/50€) per alcun libro di C, in quanto è un linguaggio vecchio (cosa inobiettabile) e non sono a conoscenza di libri didatticamente validi aggiornati all’ultimo standard.

    Non ho detto che C sia inutile o altro, ma che semplicemente, essendo un linguaggio quasi must-know, nessuno (o comunque pochissimi) si sono presi l’incarico di aggiornare i propri libri agli ultimi standard.

    Che poi se ne freghi di <stdbool.h>, <stdatomic.h>, _Generic, <complex.h> ecc… quello non lo so.

    Sarà che vengo dal C++ e di certo non consiglio C++03 con C++2a alle porte (ma per carità, C++ ha sostanziali cambiamenti ad ogni nuova ISO) e quindi mi sento di utilizzare lo stesso principio per C.

    E per quanto riguarda la portabilità, tutto ciò che sta all’interno della libreria standard è portabile. Sicuramente essendo la libreria di C molto ristretta si deve sempre ricorrere ad altre, spesso non portabili.
    Ma avere un codice non portabile perché si sbaglia a scrivere il main…
  • Re: TIPO VARIABILE

    _Achille ha scritto:


    Consiglio, cambia guida

    Innanzitutto lo standard C specifica che il tipo di ritorno del main deve essere esplicito (ed essere int).
    Correttamente è, quindi: [CODE] int main(void) { } È corretta l’osservazione che la variabile ch è inutile, ma il tipo è giustamente int.
    getchar() infatti non ritorna un char bensì un int, poiché deve contenere tutti i valori di un char + EOF

    Ok , ho capito che il getchar deve restituire un intero ma non mi è chiaro la seconda parte " poiché deve contenere tutti i valori di un char + EOF" me la potresti chiarire gentilmente?

    Comunque non preoccuparti nella guida lo sottolinea più volte che si deve restituire un int al main , penso per distrazione non l'abbiano messo li in particolare
Devi accedere o registrarti per scrivere nel forum
18 risposte