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

    [C]Programma C vettore di struct e funzione

    Ciao ragazzi del forum html.it mandando in esecuzione il programma qui sotto riesco a visualizzare solo il campo B della struct.
    L'esercizio chiede di creare la funzione ma per capire se è corretto ho voluto creare un main per richiamarla.

    Purtroppo sono alle prime armi nella programmazione e sopratutto con le struct faccio confusione,
    volevo sapere se commetto errori di sintassi ad esempio nello scrivere Q[0].A[0]=1 o nell' inserire i dati nella struttura.
    Infine in un eventuale scanf come li inserirei? dovrei scrivere &Q[0].A[0] ?.

    Ringrazio anticipatamente chiunque risponderà.

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    /*es11struct260606valmaxcampoB 
    
    DEFINIRE UN TIPO DI DATO STRUCT DI NOME SX COMPOSTO DA UN CAMPO A DI TIPO VETTORE DI 3 INTERI ED UN CAMPO 
    B DI TIPO DOUBLE.
    DEFINIRE QUINDI UN TIPO DI DATO VETTORE VTX COMPOSTO DA 10 ELEMENTI DI TIPO XS.
    SCRIVERE UNA FUNZIONE CHE HA COME PARAMETRO UN ELEMENTO DI TIPOTTX E RESTITUISCE IN UN OPP PARAMETRO 
    L' LEMENTO DI VTX CHE HA IL VALORE MASSIMO NEL CAMPO B*/
    
    typedef struct{int A[3]; double B ;}XS;
    typedef XS VETTORE[4];
    
    
    XS funz(VETTORE k)
    {
        XS ele=k[0];
        double max=k[0].B;
        int i;
        
        for(i=0;i<4;i++)
        {
            if (k[i].B>max)
                {max=k[i].B;
                ele=k[i];
                }
        }
        return ele;
    }
        
    int main()
     
    {    VETTORE Q;
        XS t;
        int i;
    
        Q[0].A[0]=1;
        Q[1].A[0]=2;
        Q[2].A[0]=3;
        Q[3].A[0]=3;
        
        Q[0].A[1]=4;
        Q[1].A[1]=5;
        Q[2].A[1]=6;
        Q[3].A[1]=3;
        
        Q[0].A[2]=7;
        Q[1].A[2]=8;
        Q[2].A[2]=9;
        Q[3].A[2]=3;
        
        Q[0].B=1;
        Q[1].B=2;
        Q[2].B=111;
        Q[3].B=3;
        
    
        t=funz(Q);
        
        for(i=0;i<=4;i++)
        
        {
        printf("%d %f",t.A,t.B );
        }
        
        
        
        system("PAUSE");
        return 0;
    }
    Ultima modifica di newuser88; 28-05-2014 a 19:13

  2. #2
    Utente bannato
    Registrato dal
    May 2014
    Messaggi
    7
    Quote Originariamente inviata da newuser88 Visualizza il messaggio
    Purtroppo sono alle prime armi nella programmazione e sopratutto con le struct faccio confusione,
    volevo sapere se commetto errori di sintassi ad esempio nello scrivere Q[0].A[0]=1 o nell' inserire i dati nella struttura.
    Sintatticamente è corretto, quello che fai è impostare a 1 il valore del primo elemento del vettore A della prima struttura nel vettore Q.
    Poi bisogna vedere se il codice fa effettivamente quello che stai cercando di fare.

    Infine in un eventuale scanf come li inserirei? dovrei scrivere &Q[0].A[0] ?.
    Si, sarebbe corretto però non ti suggerisco di usare la scanf perché sporca il buffer di input e perché non è sicura. Ti consiglio di usare la fgets: http://www.cplusplus.com/reference/cstdio/fgets/ con STDIN come ultimo argomento, per poi convertire la stringa presa in input con atoi: http://www.cplusplus.com/reference/cstdlib/atoi/ , e poi scrivere il risultato nel campo della struct.
    Potresti scrivere una funzione per evitare di riscrivere il codice ogni volta.

    Ti consiglio anche di rivedere le convenzioni: in genere i campi delle struct si dichiarano in minuscolo, le maiuscole sono riservate alle costanti. E lo stesso vale per il tipo VETTORE.

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.