Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    6

    [C] struct e puntatore

    Ciao a tutti sono nuovo del forum e ahimé ho qualche problemino con la programmazione in C.
    Sto preparando un esame universitario e sto facendo un po' di esercizi.
    Mi sono imbattuto in questo tipologia di esercizio che non riesco proprio a risolvere.



    Definire un tipo di dato ES, struct con due campi di nome A di tipo int e B di tipo vettore di 100 int. Scrivere una funzione con un parametro x di tipo di tipo ES ed un parametro y di tipo puntatore ad un intero. La funzione deve restituire attraverso y il numero di volte che il valore del campo A di x è contenuto nel campo B di x.
    Non è la prima volta che incontro un problema quando devo verificare se un valore è contenuto nei valori di un vettore;in più se ci si mette anche il puntatore non so più dov sbattare la testa.

    Quello che ho fatto è quà sotto,non dovrebbero esserci errori di sintassi,il programma gira ma non fa quello che dovrebbe.


    Spero che possiate darmi una mano
    Grazie 1000!!!!!

    codice:
    #include<stdio.h> 
    #include<stdlib.h> 
    #define d 5 
    typedef struct{int A;int B[d];}ES;
      
    int C (ES x,int*y){            
    int i,trovato; 
               
    *y=0;      
    trovato=0;     
     for(i=0;i<d;i++) 
         
    if(x.A==x.B[i]){    
                      
    trovato=1; 
                         
    *y++;                      }
                                    
    return *y;
          }    
    
    int main()    
    {        
    ES N;        int i,k;       
    N.A=5; 
          
    for(i=0;i<d;i++) 
          
    scanf("%d",&N.B[i]); 
                 
    printf("\n%d",C(N,&k));       
    printf("\n");       
    system("pause");       
    return 0;       }

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    93
    Ciao,

    il problema forse è nella precedenza degli operatori: prona (*y)++ al posto di *y++

  3. #3
    Un'altra cosa: la consegna dice "restituire attraverso y"...
    Non serve ritornare l'intero, perchè modifichi direttamente il puntatore.
    Fai restituire void alla funzione.

    PS: quella costante b scrivila maiuscola come da standard (B)
    lolide
    Java Programmer

    Informati

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    6
    Allora se metto (*y)++,mi da errore di sintassi.

    Se metto void,poi,non ho più nessun return nella funzione,giusto? In questo modo,però,non mi fa stampare il valore nel main.

    PS: quella costante b scrivila maiuscola come da standard (B)
    Immagino,che ti riferisci alla d,che indica la dimensione del vettore.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da nike99
    Allora se metto (*y)++,mi da errore di sintassi.
    Sicuro? Che compilatore usi? Quell'espressione non dovrebbe darti problemi di sintassi.

    Originariamente inviato da nike99
    In questo modo,però,non mi fa stampare il valore nel main.
    Semplicemente non stampare il valore di ritorno della funzione ma il valore di k dopo la chiamata a funzione

    codice:
    C(N, &k)
    printf("\n%d", k);
    Originariamente inviato da nike99
    Immagino,che ti riferisci alla d,che indica la dimensione del vettore.
    Immagino si riferisse proprio a quella e rilancio il suggerimento: le costanti simboliche per convenzione vanno scritte con tutti i caratteri maiuscoli per distinguerle dalle semplici variabili.
    every day above ground is a good one

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    6
    Uso devc++.Ho riprovato mi da errore prima della parentesi ")".

    Modificando in void e non mettendo il return, mi stampa sempre in ogni caso il valore 0.
    Secondo voi è giusto il procedimento della funzione o, c'èqualche passaggio errato?



    codice:
    #include<stdio.h>
     #include<stdlib.h> 
    #define D 5 
    typedef struct{int A;int B[D];}ES; 
     
    void C (ES x,int*y){            
    int i,trovato;            
    *y=0;      
    trovato=0;      
    for(i=0;i<D;i++)      
    if(x.A==x.B[i]){                      
    trovato=1;                      
    *y++; 
                         }                                                         
     }    
    int main()    
    {        ES N;        
    int i,k;       
    N.A=5;       
    for(i=0;i<D;i++)       
    scanf("%d",&N.B[i]);       
    C(N,&k);      
    printf("\n%d",k);       
    printf("\n");       
    system("pause");       
    return 0;       }

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    93
    Con *y=*y+1

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    6
    Con *y=*y+1
    Grandissimo!!! Adesso funziona correttamente.
    Tuttavia non ho capito perchè con *y++ non andava,le due scritture non dovrebbero essere equivalenti.

    Grazie 1000 a tutti!!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    93
    Non vorrei dire cavolate ma è una questione di precedenza degli operatori: *y++ incrementa l'indirizzo a cui punta y e poi ne ricava il valore...

    la cosa strana è che con le () doveva funzionare

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    6
    Sì, dovrebbe essere come dici te, nel frattempo ho provato con ++*y; e funziona anche così.Solo che normalmente non mi sarebbe mai venuto in mente...

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.