Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    30

    Problema con funzione che dovrebbe restituirmi una struct

    Ciao!! Il mio scopo era quello di fare un programmino che dal main richiama la funzione inserisciData...in breve dovrebbe prendere una struttura data o crearne una nuova richiedendo poi all'utente di inserire i dati e poi dovrebb restiturila al main che dovrebbe stampare a video i dati inseriti..però ovviamente non funziona...........
    Qualcuno ha qualche consiglio???

    #include<stdio.h>
    #include<stdlib.h>

    struct data inserisciData();

    struct data{
    int giorno;
    int anno;
    char *mese;
    };

    main(){
    struct data domani;
    printf("Avvio del programma\n");
    struct data inserisciData(struct data domani);
    printf("Il giorno e':\n",domani.giorno);
    printf("Il mese e':\n",domani.mese);
    printf("L'anno e':\n",domani.anno);
    return 0;
    }

    struct data inserisciData(data){
    struct data oggi;
    int g, a;
    char m[15];
    printf("Inserisci un giorno: \n");
    scanf("%d",&g);
    printf("Inserisci un mese: \n");
    scanf("%s",&m);
    printf("Inserisci un anno: \n");
    scanf("%d",&a);
    oggi.giorno=g;
    oggi.mese=m;
    oggi.anno=a;
    return oggi;
    }

  2. #2
    Mi sa che stai facendo un po' di confusione con le funzioni:

    codice:
    struct data inserisciData();
    Quest'interfaccia dice che questa funzione restituisce una struttura di tipo struct data senza prendere nessun paramentro in ingresso...

    codice:
    main(){
    struct data domani;
    printf("Avvio del programma\n");
    struct data inserisciData(struct data domani);
    printf("Il giorno e':\n",domani.giorno);
    printf("Il mese e':\n",domani.mese);
    printf("L'anno e':\n",domani.anno);
    return 0;
    }
    Nella riga evidenziata ci sono un paio di errori:
    1) non devi mettere il tipo delle funzioni che chiami;
    2) passi alla funzione "struct data domani", mentre come ti ho detto sopra, nel prototipo della funzione hai fatto si che a questa non venga passato niente.


    codice:
    struct data inserisciData(data){ /* Cos'è data???? Non esiste ne come variabile ne come tipo, toglilo! */
    struct data oggi;
    int g, a;
    char m[15];
    printf("Inserisci un giorno: \n");
    scanf("%d",&g);
    printf("Inserisci un mese: \n");
    scanf("%s",&m);
    printf("Inserisci un anno: \n");
    scanf("%d",&a);
    oggi.giorno=g;
    oggi.mese=m;
    oggi.anno=a;
    return oggi;
    }
    Non so bene quali siano le tue intenzioni, ma secondo me quello che vuoi fare tu è, nel main:

    codice:
    ...
    struct data domani;
    domani = inserisciData ();
    
    ...
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    30
    hai ragione.. il consiglio che mi hai dato era proprio quello che volevo fare. Però rimane un piccolo problema, ovvero non riesco a stampare il mese. Perchè non viene passato correttamente la stringa mese.
    Ho provato a mettere le printf all'interno della funzione per vedere se sbagliavo qualcosa ma no perchè me li stampa corretamente..
    Hai qualche consiglio??
    Dici che dovrei usare dei puntatori?

    Grazie mille

  4. #4
    Originariamente inviato da Heroes7
    hai ragione.. il consiglio che mi hai dato era proprio quello che volevo fare. Però rimane un piccolo problema, ovvero non riesco a stampare il mese. Perchè non viene passato correttamente la stringa mese.
    Ho provato a mettere le printf all'interno della funzione per vedere se sbagliavo qualcosa ma no perchè me li stampa corretamente..
    Hai qualche consiglio??
    Dici che dovrei usare dei puntatori?

    Grazie mille
    Succede perchè nella funzione come variabile temporanea usi char m[10] che è statica e viene distrutta appena ritorna dalla funzione.
    Quindi dopo sarà inutilizzabile

    m falla come char* e allocala con malloc

  5. #5
    Originariamente inviato da Heroes7
    hai ragione.. il consiglio che mi hai dato era proprio quello che volevo fare. Però rimane un piccolo problema, ovvero non riesco a stampare il mese. Perchè non viene passato correttamente la stringa mese.
    Ho provato a mettere le printf all'interno della funzione per vedere se sbagliavo qualcosa ma no perchè me li stampa corretamente..
    Hai qualche consiglio??
    Dici che dovrei usare dei puntatori?

    Grazie mille :)
    Come ha detto lolide, quando fai:

    codice:
    char m[15];
    Crei una variabile locale che, terminata la funzione, viene distrutta; devi fare, per poterla utilizzare dopo che la funzione che l'ha creata termina:

    codice:
    char* mese;
    mese = (char*) malloc (sizeof(char)*15); /* se ti interessano 15 caratteri */
    Attenzione però a una piccola cosa:

    codice:
    printf("Inserisci un mese: \n");
    scanf("%s",&m);
    In entrambi i modi per creare una stringa (con la malloc o senza), essa risulta un puntatore e pertanto nella scanf non ci vuole l'andpersand (&) chiaro? Quindi considerato quanto detto sopra, la scanf sarà:

    codice:
    scanf ("%s", mese);
    Ultimissima cosa, nel main, prima di terminare, devi manualmente liberare l'area di memoria che hai allocato, facendo:

    codice:
    free (domani.mese);
    Detto ciò dovrebbe andare tutto bene :)
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    30
    Grazie mille per le risposte!! ora funziona!!

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.