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

    [c] Strutture e funzioni

    Ciao a tutti! Sto provando a capire come funzionano strutture e funzioni e così ho provato a combinarle assieme. Ho scritto questo codice ma compilando mi da errore. Mi spiegate dove sto sbagliando? E mi potete elencare gli errori che ho fatto?
    Grazie!

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define LUNGHEZZA 10

    void inserisci (void)

    int main(void){
    printf("Ciao\n");
    struct part {
    char Cognome[LUNGHEZZA+1], Nome[LUNGHEZZA+1];
    }struttura;

    int numero;
    printf("Ciao scrivi 1 se vuoi inserire nome e cognome");
    scanf("%d", &numero);
    if (numero == 1)
    inserisci();

    void inserisci (void)
    {
    int i;
    printf("nome?");
    for (i=0; i<LUNGHEZZA;i++)
    scanf("%c", &struttura.Nome[i]);
    printf("\n");
    printf("Cognome?");
    for (i=0; i<LUNGHEZZA;i++)
    scanf("%c", &struttura.Cognome[i]);
    printf("\n");
    }
    return 0;
    }

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

    Moderazione

    Originariamente inviato da elnelly
    Ho scritto questo codice ma compilando mi da errore.
    "Mi da errore" è un po' generico... almeno dire quale errore ti da...

    Il codice va formattato usando il tag [CODE], come da Regolamento.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  3. #3
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Non sono bravissimo con il linguaggio c ma posso aiutarti e voglio farlo

    un errore hai inserito una funzione all'interno del main NON è POSSIBILE inseririre
    funzioni all'interno di altre funzioni IN NESSUN LINGUAGGIO

    la struct struttura è all'interno del main quindi è locale NON MODIFICABILE da altre
    funzioni se non si passa per riferimento i puntatori

    SOLUZIONI
    scrivere la struct fuori dal main e renderla globale ("accessibile da tutte le funzioni")

    o passare un puntatore alla funzione e modificarla


    soluzione con struttura globale
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define LUNGHEZZA 10 
    struct part { // SE DEVI ACCEDERE A STRUTTURA O USI PUNTATORI O è GLOBALE
    // FUORI DAL MAIN 
    char Cognome[LUNGHEZZA+1], Nome[LUNGHEZZA+1];
    }struttura;
    void inserisci (void);//MANCAVA IL PUNTO E VIRGOLA FINE ISTRUZIONE
    
    int main(void){
    printf("Ciao\n");
    int numero;
    printf("Ciao scrivi 1 se vuoi inserire nome e cognome");
    scanf("%d", &numero);
    if (numero == 1)
    inserisci();
    }// FINE MAIN
    
    void inserisci (void)// LA FUNZIONE ERA SCRITTA ALL'INTERNO DEL MAIN
    {
    int i;
    printf("nome?");
    //for (i=0; i<LUNGHEZZA;i++) SOSTITUIAMOLO CON UN SCANF %S
    scanf("%s", struttura.Nome); 
    fflush(stdin); // serve per pulire stdin
    printf("\n");
    printf("Cognome?");
    //for (i=0; i<LUNGHEZZA;i++)
    scanf("%s", struttura.Cognome); 
    printf("\n");
    }
    d

    soluzione con puntatori

    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define LUNGHEZZA 10 
    typedef struct part { // creiamo un tipo struttura di nome s
    char Cognome[LUNGHEZZA+1], Nome[LUNGHEZZA+1];
    }s;
    void inserisci (s*);//funzione che riceve un puntatore di tipo s 
    
    int main(void){
    s struttura;    
    printf("Ciao\n");
    int numero;
    printf("Ciao scrivi 1 se vuoi inserire nome e cognome");
    scanf("%d", &numero);
    if (numero == 1)
    inserisci(&struttura);//invio il puntatore a struttura
    puts(struttura.Nome);
    puts(struttura.Cognome);
    getchar();
    getchar();
    }// FINE MAIN
    
    void inserisci (s* a)
    {
    int i;
    printf("nome?");
    //for (i=0; i<LUNGHEZZA;i++) SOSTITUIAMOLO CON UN SCANF %S
    scanf("%s", a->Nome); 
    fflush(stdin); // serve per pulire stdin
    printf("\n");
    printf("Cognome?");
    //for (i=0; i<LUNGHEZZA;i++)
    scanf("%s", a->Cognome); 
    printf("\n");
    }
    Tecnologia

  4. #4

    Re: ciao

    Originariamente inviato da torn24
    NON è POSSIBILE inseririre
    funzioni all'interno di altre funzioni IN NESSUN LINGUAGGIO
    falso. Ad esempio:
    codice:
    // JavaScript
    function outerF(x) { 
        function innerF(x) { 
            return 4 * x 
            } 
        return 3 * innerF(x) 
        }

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Anche in C esiste un'estensione GNU "nested functions", ovviamente però bisogna definire prima la funzione e poi richiamarla (diversamente da quanto fatto dall'op). In ogni caso si tratta di una caratteristica da evitare il più possibile per tanti motivi, primo tra tutti perché è assolutamente non portabile.
    every day above ground is a good one

  6. #6
    Originariamente inviato da YuYevon
    In ogni caso si tratta di una caratteristica da evitare il più possibile per tanti motivi,
    Mah, le lambda functions in C++0x sono gran comode se si va verso uno stile di programmazione funzionale:
    codice:
    void RimuoviDispari(std::vector<int> & unVector)
    {
        // Rimuove tutti gli elementi dispari
        unVector.erase(
            std::remove_if(unVector.begin(), unVector.end(),
                [] (int i) { return (bool) i%2; }),
            unVector.end());
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da MItaly
    Mah, le lambda functions in C++0x sono gran comode se si va verso uno stile di programmazione funzionale:
    No intendevo dire da evitare in C, essendo appunto non così utili da sacrificare la portabilità.
    every day above ground is a good one

  8. #8
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao a tutti

    c'è sempre da imparare
    comunque il fatto che il codice non funzionava ("tra le altre cose") era per il fatto che ha inserito la funzione in un altra funzione che poi si possa fare in qualche modo mi rimetto alla vostra conoscenza

    comunque sicuramente non è argomento da trattare per un principiante e credo che
    se una persona ha problemi ad accedere ad una struttura da una funzione o
    scrivere correttamente una funzione
    leggendo quello che è stato scritto si possa solo confondere le idee

    quello che penserei io al suo posto bene si può inserire una funzione all'interno di
    un altra funzione io ho fatto cosi ma perchè non funziona
    Tecnologia

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.