Visualizzazione risultati 1 fino 12 di 12

Discussione: Problema in C, HELP ME

  1. #1
    Guest

    Predefinito Problema in C, HELP ME

    Premesso che del C...@school nn abbiamo fatto molto...3settimane max...
    mi è stato dato da fare questo problema...:
    Dato in input il mese e l'anno fornire in output il numero di giorni che compongono il mese.

    Sto facendolo con DEV-C++ ma nn riesco...mi dice:
    In function `int main()':
    16 expected primary-expression before "else"
    16 expected `;' before "else"
    23 expected primary-expression before "else"
    23 expected `;' before "else"
    [Build Error] [mese.o] Error 1

    Insomma nn so che fare...x questo vi chiedo aiuto, questo è quel che ho scritto....
    #include <cstdlib>
    #include <iostream>

    using namespace std;
    char mese, gennaio, febbraio, marzo, aprile, maggio, giugno, luglio, agosto, settembre, ottobre, novembre, dicembre;
    int anno;
    int main(){
    cout<<"Inserisci il nome del mese con caratteri minuscoli"<<mese;
    cin>>mese;
    cout<<"Inserisci l'anno"<<anno;
    cin>>anno;
    {
    if(mese=aprile||giugno||settembre||novembre)
    {
    cout<<"Il mese dura 30 giorni"<< endl;
    else
    {
    if(mese=gennaio||marzo||maggio||luglio||agosto||ot tobre||dicembre)
    {
    cout<<"Il mese dura 31 giorni"<<endl;
    }
    }
    else
    {
    if(mese=febbraio)
    {
    if(anno%4=0)
    {
    cout<<"Il mese dura 29 giorni"<<;
    if(anno%4!=0)
    {
    cout<<"Il mese dura 28 giorni"<<;
    }
    }
    }
    system("PAUSE");
    return EXIT_SUCCESS;
    }
    }
    }
    }

  2. #2
    L'avatar di twisterdark
    twisterdark non è connesso Moderatore
    Data registrazione
    17-11-2002
    Residenza
    Hong Kong
    Messaggi
    3,226

    Predefinito

    Riga 16, il primo else non lo hai messo dopo la "}" ma è ancora dentro. Deve essere "if(){...}else{...}"
    Riga 23, hai messo due "}}"
    Il codice in realtà è un po' sfasato, ma ora non ho tempo...se non va e mi è sfuggito quaclosa (sicuramente) e nessuno è ancora passato. Ci penso dopo ;)


    -------------------------------------------------------------------------------------------------------------------------------------
    Un moderatore per gestirli, un moderatore per guidarli, un moderatore per sgridarli e nel buio anche bannarli...

    ------------------------------------------------------------------------------------------------------------------------------------------

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da twisterdark
    Riga 16, il primo else non lo hai messo dopo la "}" ma è ancora dentro. Deve essere "if(){...}else{...}"
    Riga 23, hai messo due "}}"
    Il codice in realtà è un po' sfasato, ma ora non ho tempo...se non va e mi è sfuggito quaclosa (sicuramente) e nessuno è ancora passato. Ci penso dopo ;)
    Grazie, ma ora mi da questi errori:
    In function `int main()':
    27 non-lvalue in assignment
    [Build Error] [mese.o] Error 1

    Ecco il nuovo codice:
    #include <cstdlib>
    #include <iostream>

    using namespace std;
    char mese, gennaio, febbraio, marzo, aprile, maggio, giugno, luglio, agosto, settembre, ottobre, novembre, dicembre;
    int anno;
    int main(){
    cout<<"Inserisci il nome del mese con caratteri minuscoli"<<mese;
    cin>>mese;
    cout<<"Inserisci l'anno"<<anno;
    cin>>anno;
    {
    if(mese=aprile||giugno||settembre||novembre)
    {
    cout<<"Il mese dura 30 giorni"<< endl;
    }
    else
    {
    if(mese=gennaio||marzo||maggio||luglio||agosto||ot tobre||dicembre)
    {
    cout<<"Il mese dura 31 giorni"<<endl;
    }
    else
    {
    if(mese=febbraio)
    {
    if(anno%4=0)
    {
    cout<<"Il mese dura 29 giorni"<<endl;
    if(anno%4!=0)
    {
    cout<<"Il mese dura 28 giorni"<<endl;
    }
    }
    }
    system("PAUSE");
    return EXIT_SUCCESS;
    }
    }
    }
    }

  4. #4
    L'avatar di twisterdark
    twisterdark non è connesso Moderatore
    Data registrazione
    17-11-2002
    Residenza
    Hong Kong
    Messaggi
    3,226

    Predefinito

    Approposito, ottobre attaccalo altrimenti sballa tutto...


    -------------------------------------------------------------------------------------------------------------------------------------
    Un moderatore per gestirli, un moderatore per guidarli, un moderatore per sgridarli e nel buio anche bannarli...

    ------------------------------------------------------------------------------------------------------------------------------------------

  5. #5
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Ehm... è veramente tutto sballato... provo a risistemare le cose (questo è codice C, leggermente diverso da C++ ma conosco quello...)
    Codice:
    #include <stdio.h>
    
    int main ()
    {
       char[] mese;
       int anno;
       printf ("Inserisci nome del mese... ");
       gets (mese);
       printf ("Inserisci anno... ");
       scanf ("%d", &anno);
       if (strcmp (mese, "aprile") == 0 ||
          strcmp (mese, "giugno") == 0 ||
          strcmp (mese, "settembre") == 0 ||
          strcmp (mese, "novembre") == 0)
          printf ("Il mese ha 30 giorni");
       else if (strcmp (mese, "febbraio") == 0)
       {
          if (anno % 4 == 0)
             printf ("Il mese ha 29 giorni");
          else
             printf ("Il mese ha 28 giorni");
       }
       else /* qui resterebbero gli altri mesi, ma SOLO nell'ipotesi che l'input sia corretto! */
          printf ("Il mese ha 31 giorni");
       return 0;
    }
    Questo, in linea di massima funziona... ma dovrai stare bene attento quanto il programma ti risponderà che:
    - "febbraio 1900" aveva 29 giorni (errore: il 1900 non è bisestile!)
    - "fjm<sòdfjs 2006" è un mese con 31 giorni (....eh?)

    Statemi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  6. #6
    Guest

    Predefinito

    xke inizializzi della variabili con i differenti nomo dei mesi????

    nell if(mose=="gennaio") con le virgolette (credo) senno il compaile nn vede che e' una string e credera' che e' il nome di una variablie (che nel tuo caso nn e' inizializzata a niente)

    spero ke questo ti basti (semmai mandami un mail teseo@bluewin.ch)

  7. #7
    Guest

    Predefinito

    [OT]
    e cmq il 1900 ke io sappia è stato bisestile cm lo è stato il 2000
    [/OT]
    quindi almeno quello del 1900 non sarebbe un errore,
    ciao!

  8. #8
    Guest

    Predefinito

    Grazie mille x il codice...
    @dementialsite: xò nn ci hanno spiegato nemmeno "for" e altri comandi che usi nn li ho mai visti...
    ...alla fine ho pensato che i mesi nn dovevano necessariamente essere a parole visto che char prende solo la prima lettera(nn lo sapevo)...e infine il codice che ho scritto è questo...


    Codice:
    #include <iostream>
    
    using namespace std;
    int mese, anno;
    int main(){
    cout<<"Inserisci il numero del mese"<<endl;
    cin>>mese;
    cout<<"Inserisci l'anno"<<endl;
    cin>>anno;
    
        if((mese==4)||(mese==6)||(mese==9)||(mese==11))
        {
        cout<<"Il mese dura 30 giorni"<< endl;    
    }
        if((mese==1)||(mese==3)||(mese==5)||(mese==7)||(mese==8)||(mese==10)||(mese==12))
            {
            cout<<"Il mese dura 31 giorni"<<endl;
            }
         if(mese==2)
              {
                          if(anno%4==0)
                          {
                          cout<<"Il mese dura 29 giorni"<<endl;
                          }
                                       else
                                       {
                                       cout<<"Il mese dura 28 giorni"<<endl;
                                       }
                          } 
        if(mese>12)
        {
                     cout<<"Non esiste un mese con quel numero"<<endl;
                     }                           
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    CMQ grazie a tutti!

  9. #9
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    [4 SFo]
    Citazione Originalmente inviato da SFo
    [OT]
    e cmq il 1900 ke io sappia è stato bisestile cm lo è stato il 2000
    [/OT]
    quindi almeno quello del 1900 non sarebbe un errore,
    ciao!
    Prima del 1582 c'era il calendario giuliano, uguale al nostro, solo che con i "giusti" anni bisestili ogni 4 anni.

    Quando poi fu scoperto che la precessione del calendario giuliano aveva causato uno sballamento di 9 giorni in 1200 anni (quei giorni furono poi letteralmente cancellati dal calendario, quell'anno), a partire dal 1582:
    - sono bisestili gli anni multipli di 4
    - non sono bisestili gli anni multipli di 100 (pur essendo multipli di 4)
    - sono bisestili gli anni multipli di 400 (pur essendo multipli di 100)

    Vuoi saperne un'altra? Gli scienziati avrebbero calcolato che bisognerebbe togliere un altro giorno ogni 4.000 anni... ci vediamo nel 4000?

    [4 teseo] Non è possibile confrontare così le stringhe... il confronto restituisce falso perché si tratta di due posizioni di memoria distinte. Per confrontare due stringhe devi usare la funzione strcmp (str1, str2) che ti restituisce:
    - 0, se le due stringhe sono uguali
    - un numero positivo, se str1 è lessicograficamente posteriore a str2
    - un numero negativo, se str1 è lessicograficamente anteriore a str2 (o è il contrario?)

    [4 worldfree] Ti avevo detto che quello è codice C e non C++ (C non usa gli stream di lettura e scrittura come usi tu in C++). Ma poi il "for" dove l'hai visto? Io ho usato solo if / else if / else...

    Statemi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  10. #10
    Guest

    Predefinito

    xke nn usi switch????

    se vuoi ke il mese sia in lettere devi inizializzare un array di char tipo:

    mese[50]

  11. #11
    Guest

    Predefinito

    Citazione Originalmente inviato da dementialsite
    [4 teseo] Non è possibile confrontare così le stringhe... il confronto restituisce falso perché si tratta di due posizioni di memoria distinte. Per confrontare due stringhe devi usare la funzione strcmp (str1, str2) che ti restituisce:
    - 0, se le due stringhe sono uguali
    - un numero positivo, se str1 è lessicograficamente posteriore a str2
    - un numero negativo, se str1 è lessicograficamente anteriore a str2 (o è il contrario?)

    sapevo ke era cosi' in c ma mi sembrava ricordare ke in c++ si potessa paragonar edirettamente le stringhe di caratteri :P

  12. #12
    Guest

    Predefinito

    @dementialsite
    ammazza qst nn la sapevo proprio, eppure mi ricordavo fosse stato bisestile il 2000

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •