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

    c problema con il passaggio per riferimento strutture

    salve a tutto mi sono appena iscritto a HTML.IT mi chiamo roberto e ho questo grattacapo

    allora io dichiaro una struct
    codice:
    struct d {
    int a,d;
    char b[30];
    char c[30];};
    che rappresenterà un ipotetico dipendente per il mio esercizio quando
    la passo dal main a questa funzione che dovrebbe aggiungere un tot dipendenti al file già creato in precedenza
    la funzione viene passsata del main cosi [aggdat(p,&c)] passando tutto per riferimento, dove p nel main è (FILE *p) e la struct è (struct d dipendente = {0,0,"",""}
    codice:
    void aggdat (FILE *p,struct d *op) {
    int m,n;
    if ((p = fopen ("lista.txt","rb+")) != NULL){
    printf("quanti nuovi utenti vuoi aggiungere?\n");
    scanf("%d" ,&m);
    for(n = 0;n<m;n++){
    fseek(p, n*sizeof(struct d), SEEK_END);
    printf("inserisci numero di conto\n");
    scanf("%d",op.a);
    printf("inserisci nome\n");
    scanf("%s",op.b);
    printf("inserisci cognome\n");
    scanf("%s",op.c);
    printf("inserisci bilancio\n");
    scanf("%d",op.d);
    fwrite(dip,sizeof(struct d),1,p);
    if (n+1 != m){printf("inserisci prossimo cliente\n\n");}
    }fclose(p);}
    allora io ho visto che il compilatore dev c++ 4 mi da
    (request for member `a' in `op', which is of non-aggregate type `cl *') perchè io ho provato in tutti i modi e mi sembra un errore strano. spero che non abbia fatto la figura del niubbo ma propio mi sembra strano ho anche guardato questo post per evitare che non avessi sbagliato nulla a livello sintattico ( qualcosa mi sarà sicuramente sfuggito) ma io non lo trovato spero che voi mi aiutiate grazie a tutti in anticipo

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    op è un puntatore alla struttura, non la struttura.
    Usa -> al posto di . (Es: op->a; op->b oppure, perfeddamente equivalente, utilizza l'operatore di deferenziazione (*) congiunto all'operatore di accesso ai campi della struttura (.) (Es: (*op).a; (*op).b
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    grazie mille davvero ora ho capito dove era il problema grazie ancora

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    C'è anche un altro errore: i campi della struttura "a" e "d" vanno passati per riferimento alle scanf().

    codice:
    scanf("%d", &op->a);
    ...
    scanf("%d", &op->d);
    every day above ground is a good one

  5. #5

    Moderazione

    Tip per il futuro: inserisci il codice tra tag [code] ... [/code], in modo che risulti formattato in modo corretto; a questo giro ho corretto io.


    (... e magari usa uno stile di indentazione un po' più leggibile... )
    Amaro C++, il gusto pieno dell'undefined behavior.

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.