Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    10

    [C]Lettura da stdin

    Salve a tutti, è tutta la mattina che cerco di risolvere un problema... E ho la netta sensazione che quando capirò come fare avrò una reazione tipo -_-'''

    CMQ devo bufferizzare un testo da stdin.
    Mettiamo che io non sappia quali saranno le dimensioni del testo sullo stdin (che è il caso più comune direi). Allora ho fatto

    int i = 0;
    char** bigBuffer = NULL;
    while (*condition*){
    bigBuffer = realloc (bigBuffer, (i+1) * sizeof(char*));
    bigBuffer[i] = malloc(100*sizeof(char));
    fgets(bigBuffer[i], 100, stdin);
    i++;
    }

    Questo dovrebbe mettere su bigBuffer 100 chars alla volta. Ovviamente il testo potrà contenere dei \n (tipo: "Il gatto mangia il topo.\nIl cane mangia il gatto.\nIl cane ha mangiato il topo\n), quindi una condizione d'uscita dal while sul '\n' non funziona.
    Se si trattasse di un txt basterebbe cercare EOF, ma io devo leggere da stdin...

    Cosa metto come condition per uscire dal while?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    a volte si bufferizza per un numero fisso di caratteri (es. sempre 80 caratteri) in modo da non dover aspettare che ci sia un carattere speciale.
    Se guardi i buffer possono memorizzare un tot di caratteri prima di fare un flush (ergo a volte bisogna forzarne lo svuotamento)

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    10
    In che senso? Intendi che se scrivo su stdin un testo più lungo di 80 chars quelli "di troppo" vengono scartati? Non mi sembra una buona soluzione : P

    Davvero non c'è un modo in c per riconoscere "dove finisce stdin"?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    no, li devi bufferizzare tu....leggi 80 caratteri e invii leggi 80 caratteri e invii...quando leggi meno di 80 caratteri hai finito.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    10
    mmm ora sono troppo stanco per capire/pensare/provare... ho il cervello letteralmente fuso... domattina mi ci rimetto e vediamo se ho capito quello che dici... intanto grazie cmq

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    10
    Risolto... Quello che dicevi ieri l'avevo già provato, e lo avevo escluso perchè mi ero convinto che la fgets riempisse il buffer con dei valori di default se non c'erano abbastanza chars in input... In effetti basta fare la strlen e vedere quando la stringa è più corta di 80 (che è quello che avevo fatto ieri, solo che non avevo pensato che la strlen non conteggia il char di terminazione stringa e quindi devo fare (strlen(...) + 1 < 80) anzichè (strlen(...) < 80)... e così avevo finito per pensare che l'errore fosse nella fgets -_-

    Grazie mille!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.