Un suggerimento sulla getchar!

di il
2 risposte

Un suggerimento sulla getchar!

Sto programmando in C e sono bloccato nell'acquisizione di una stringa. Sto utilizzando la funzione getchar in ciclo. E fa il suo dovere, solo che non so come dare un limite di caratteri acquisiti da questo ciclo. Ho provato con un semplice contatore ma per qualche motivo non sono riuscita. Riassumendo: avete qualche idea su come sarebbe possibile limitare (in quantità) l'acquisizione di caratteri in un ciclo getchar? Nel caso serva ecco il link al codice (per evitare dubbi metto tutta la sola funzione per l'acquisizione, il resto non credo proprio serva), da brava idiota non sono stato in grado si mettere l'anteprima dello screen >.<

http://oi40.tinypic.com/1539q3b.jp

Ovviamente anche solo qualche buona idea è ben accetta! Grazie!!!

2 Risposte

  • Re: Un suggerimento sulla getchar!

    Non bisogna sempre inventare la ruota,basta usare la funzione piu sicira dello standard,fgets,ma dato che include anche lo '\n' che spesso è in eccesso,riscrivere la funzione diventa elementare.
    char* con_gets(char* d,unsigned int sz)
    {
        char* ret = fgets(d,sz,stdin);
        if ( ret != NULL)
            ret[strlen(ret)-1] = '\0';
        return ret;
    }
    In questo modo la dimensione minima o comunque il buffer dovrà essere maggiore di due rispetto alla lettura perchè comunque leggeremo anche lo '\n' e '\0'

    Se invece vuoi fare di testa tua diventa:
    
    char* con_gets(char* d,unsigned int sz)
    {
        char* std = d;
        while ( (*d = getchar()) != EOF && *d != '\n' && sz-- > 0 ) d++;
        *d = '\0';
        return std;
    }
    
    Il codice non metterlo in una immagine ma usa gli appositi tag code e postalo direttamente sul forum.
  • Re: Un suggerimento sulla getchar!

    Un po' di confusione iniziale ma ho risolto, grazie a te ovviamente! Chiaro,conciso, e soprattutto veloce a rispondere. La prossima volta niente screen promesso. Ciao e grazie ancora!!!n
Devi accedere o registrarti per scrivere nel forum
2 risposte