Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C]Leggere dati fino a '\n'

    Devo leggere delle coppie di numeri interi separate da '\n' fino a quando non viene digitato invio per due volte.

    In poche parole l'input dovrà essere il seguente:

    3 5\n
    23 5\n
    12 6\n
    \n
    Fine lettura

    Qualcuno può aiutarmi?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: [C]Leggere dati fino a '\n'

    Originariamente inviato da alex986best
    Devo leggere delle coppie di numeri interi separate da '\n' fino a quando non viene digitato invio per due volte.
    Esempio:
    codice:
    char  buffer[80];
    int   num1, num2;
    FILE *f;
    
    if ((f = fopen ("nomefile", "r")) != NULL)
    {
        while (fgets (buffer, sizeof (buffer), f) != NULL)
        {
            if (buffer[0] == '\n')
                break;
    
            if (sscanf (buffer, "%d %d", &num1, &num2) == 2)
            {
                /* ...fai quello che vuoi con i numeri... */
            }
        }
    
        fclose (f);
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    ok,

    il problema però è che devo leggere l'input dallo schermo e non da un file...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da alex986best
    il problema però è che devo leggere l'input dallo schermo e non da un file...
    Già ... ok.

    Si fa in fretta: togli fopen()/fclose() e poi usi:

    while (fgets (buffer, sizeof (buffer), stdin) != NULL)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Originariamente inviato da andbin
    Già ... ok.

    Si fa in fretta: togli fopen()/fclose() e poi usi:

    while (fgets (buffer, sizeof (buffer), stdin) != NULL)
    ok, ora lo provo

    grazie mille ancora

  6. #6
    ok, funziona...

    ora avrei un'altra domanda: come faccio a creare un array senza saperne a priori le dimensioni?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da alex986best
    ora avrei un'altra domanda: come faccio a creare un array senza saperne a priori le dimensioni?
    Dovresti specificare array di che cosa ... comunque una gestione "dinamica" della dimensione di un array è fattibile con le funzioni di (ri)allocazione dinamica della memoria. Vedi le funzioni standard malloc()/realloc().

    In sostanza si alloca un array in modo che contenga all'inizio un tot di elementi (quanti lo stabilisci tu) e poi man mano, quando serve, lo si espande.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  8. #8
    un array composto da elementi di una struttura definita da me....

    Avresti qualche esempio?

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da alex986best
    un array composto da elementi di una struttura definita da me....

    Avresti qualche esempio?
    Questo esempio l'ho scritto velocemente (non l'ho provato) ma dovrebbe essere ok.

    codice:
    typedef struct
    {
        int a;
        int b;
    } ELEM, *PELEM;
    
    typedef struct
    {
        PELEM pelem;
        int   size;
    } ELEMARRAY, *PELEMARRAY;
    
    int ElemArray_Create (PELEMARRAY parray, int size)
    {
        PELEM pelem;
    
        if (parray == NULL)
            return 0;
    
        pelem = (PELEM) malloc (size * sizeof (ELEM));
    
        if (pelem == NULL)
            return 0;
    
        parray->pelem = pelem;
        parray->size = size;
        
        return 1;
    }
    
    void ElemArray_Free (PELEMARRAY parray)
    {
        if (parray == NULL)
            return;
        
        if (parray->pelem != NULL)
            free (parray->pelem);
    
        parray->pelem = NULL;
        parray->size = 0;
    }
    
    int ElemArray_Realloc (PELEMARRAY parray, int newsize)
    {
        PELEM pelem;
    
        if (parray == NULL)
            return 0;
        
        pelem = (PELEM) realloc (parray->pelem, newsize * sizeof (ELEM));
    
        if (pelem == NULL)
            return 0;
    
        parray->pelem = pelem;
        parray->size = newsize;
    
        return 1;
    }
    Poi, dove ne hai bisogno, fai:

    codice:
    ELEMARRAY mioarray;
    
    if (ElemArray_Create (&mioarray, 100))
    {
        ....
        mioarray.pelem[0].a = 10;
        mioarray.pelem[0].b = 20;
    
        ....
        if (ElemArray_Realloc (&mioarray, 200))
        {
            ....
        }
    
        ElemArray_Free (&mioarray);
    }
    Se ti stai chiedendo perché ho scritto tutto questo codice ... beh, così la gestione dell'array espandibile è molto più "pulita" e "incapsulata"!!!
    Naturalmente puoi aggiungere altre funzioni.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Moderazione

    Originariamente inviato da alex986best
    ora avrei un'altra domanda [...]
    Per ogni domanda relativa ad un problema differente, è preferibile aprire una nuova discussione.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.