Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C] scanf() con Strutture

    codice:
    struct orario {
    	short int ore;
    	short int minuti;
       short int secondi;
    };
    Come mai nella scanf() ho dovuto inserire la & ???
    in genere quando si ha un puntatore non serve la &
    allora perche' qui l'ho dovuto mettere ???

    codice:
       struct orario ora1;
       struct orario *sp;
    
       sp = &ora1;
       printf ("Inserisci ora : ");
       scanf  ("%d", &sp->ore);
    PoWered by:
    Gentoo 1.5.3 - Kernel 2.6.7
    Debian Sid - Kernel 2.6.7 - Bash 3.0
    Slackware current - Kernel 2.6.7

  2. #2
    Perchè la scanf() richiede l'indirizzo della variabile.

    Nel tuo caso la variabile è in una struttura, quindi tu devi dargli l'indirizzo di quella variabile nella struttura, e quindi:

    codice:
    scanf ("%d", &sp -> ore);
    Che equivale a:

    codice:
    scanf ("%d", &(*sp).ore);
    E quindi a:

    codice:
    scanf ("%d", &ora1.ore);
    Nota come le ultime due sono identiche, solo che una vale per il puntatore, l'altra direttamente sulla variabile.

    bye

  3. #3
    ma in genere quando uso i puntatori non dico &puntatore

    es.
    codice:
       char a;
       char *b;
    
       b = &a;
       scanf("%d", b);
    o sbaglio ???
    PoWered by:
    Gentoo 1.5.3 - Kernel 2.6.7
    Debian Sid - Kernel 2.6.7 - Bash 3.0
    Slackware current - Kernel 2.6.7

  4. #4
    Si certo, ma tu mica gli devi dare l'indirizzo della struttura.

    Devi dargli l'indirizzo del campo della struttura.


  5. #5
    a... Quindi Anche se uso un puntatore a struttura l'indirizzo lo devo dare comunque...

    Grazie Mille...
    PoWered by:
    Gentoo 1.5.3 - Kernel 2.6.7
    Debian Sid - Kernel 2.6.7 - Bash 3.0
    Slackware current - Kernel 2.6.7

  6. #6
    Si certo, perchè ti ripeto:

    L'indirizzo che passi è alla struttura, non al campo "ore" della struttura.
    codice:
    #include <stdio.h>
    
    struct orario {
            short int ore;
            short int minuti;
            short int secondi;
    };
    
    int main (void) {
            short int *p;
            struct orario ora1;
            struct orario *sp = &ora1; /* assegno a sp, l'indirizzo di ora1 */
            p = &sp -> ore; /* oppure &(*sp).ore */
            printf ("Inserisci ora : ");
            scanf ("%d", p); /* qui passo l'indirizzo del campo in qlla struct */
            return (0);
    }
    bye

  7. #7
    Ok.. Adesso e' Ancora piu' Chiaro...
    Grazie Infinite....
    PoWered by:
    Gentoo 1.5.3 - Kernel 2.6.7
    Debian Sid - Kernel 2.6.7 - Bash 3.0
    Slackware current - Kernel 2.6.7

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 © 2025 vBulletin Solutions, Inc. All rights reserved.