Programma che calcola che giorno è il prossimo mese

di il
6 risposte

Programma che calcola che giorno è il prossimo mese

Salve ragazzi ho creato un programma che calcola il giorno della settimana corrispondente dando una quasiasi data il problema è che mi da un errore durante la compilazione ma non mi dice che errore è
vi posto il sorgente:

#include <stdio.h>
int main(){
//calcolo mese di novembre 2012 in che giorno stiamo sommando la data con quella attuale
    int giorno,n_giorno;
    char * stringa;
    
    
    
    giorno=3; //primo giorno = giovedì
    printf("dimmi di quanti giorni devo andare avanti");
    scanf("%d",&n_giorno);
    if(n_giorno<0)
    {
        printf("sono capace solamente di contare in avanti per tutto il mese\n");
    }
    
    else{ giorno+=n_giorno;
        if(giorno>30)
        {
            printf("impossibile eseguire il calcolo perchè con il numero inserito mi ritrovo al mese prossimo\n");
        }
        else
            
        {
          
            if(giorno%1==0)
            {
                stringa="lunedi";
            }
            if(giorno%2==0)
            {
            stringa="martedi";
            }
            
            if(giorno%3==0)
            {
                stringa="mercoledi";
            }
            if(giorno%4==0)
            {
                stringa="giovedi";
            }
            if(giorno%5==0)
            {
                stringa="venerdi";
            }
            
            if(giorno%6==0)
            {
                stringa="sabato";
            }
            if(giorno%7==0)
            {
                stringa="domenica";
            }    
        }
        
    }
    printf("tra %d giorni è il giorno %s",giorno,stringa);
}

perdonate tutte le parentesi graffe superflue ma il mio prof le richiede obbligatoriamente

6 Risposte

  • Re: Programma che calcola che giorno è il prossimo mese

    Io ti consiglierei di fare un pò di ordine e di eliminare molto codice superfluo utilizzando un tipo enumerato per rappresentare i giorni della settimana, il codice sarebbe molto più compatto sicuro ed efficiente.
  • Re: Programma che calcola che giorno è il prossimo mese

    Ciao Broke31,

    Non è un errore di compilazione, il programma si compila senza problemi, è un errore a run-time.
    L' errore è dovuto al fatto che non allochi la variabile 'stringa', in pratica stai usando un puntatore non inizializzato e quindi scrivi a caso nella memoria.

    Anche a me piacciono le parentesi fatte a quel modo, quindi non devi scusarti di averle messe.
  • Re: Programma che calcola che giorno è il prossimo mese

    Barba59 perdonami ma quindi mi stai dicendo che dovrei usare la funzione malloc?? giusto?? sono 2 anni che non uso i puntatori quindi sto trovando 1 po' di difficoltà nel riprenderli(nemmeno + di tanto però )toglimi una curiosità perchè anche a te piace mettere le graffe anche dove è sottinteso? il mio prof dell'uni dice che può sempre capitare di aggiungere qualche riga di codice e quindi ci dimentichiamo di mettere le graffe ...anche per te la spiegazione è uguale?
  • Re: Programma che calcola che giorno è il prossimo mese

    Ciao broke31

    Si esatto, devi fare le malloc (o le new o usare la classe string). Quando dichiari char* stringa dichiari un puntatore a cui deve essere assegnato l' indirizzo di una zona di memoria (che allochi con la malloc) in cui scrivere la stringa.

    Per le parentesi, è questioni di gusti per cui non dovremmo neanche stare a parlarne.
    Personalmente ho sempre trovato noioso dover aggiungere le graffe quando aggiungo istruzioni a un if, cosa che capita invariabilmente, faccio molto prima a metterle subito senza stare a pensarci. Però non è una regola rigida e a volte non le metto (e mi tocca metterle dopo )
  • Re: Programma che calcola che giorno è il prossimo mese

    Hai pienamente ragione xd io a scuola sfogliando i vecchi quaderni di c++ mi sono ricordato che usavo l'istruzione new purtroppo non so come mai ma da errore nel momento che vado a fare l'allocazione ho scritto così:
    
    
    stringa=new(char);
    
    
    sto sbagliando sintatticamente??
  • Re: Programma che calcola che giorno è il prossimo mese

    Et voila:
    
    char* stringa = (char*) malloc(200);
    ...
    free(stringa);
    
    // oppure
    
    char* stringa = new char[200];
    ...
    delete stringa;
    
    oppure meglio ancora:
    
    #include <string>  // senza .h
    using namespace std;
    
    int main()
    {
        string stringa; 
        ...
    
    }
    
    e sei a posto, è già tutto allocato e si ridimensiona da sola se serve, non devi neppure liberare la memoria.
Devi accedere o registrarti per scrivere nel forum
6 risposte