Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    15

    [C]array di char e lettura data

    Sto scrivendo lo stesso programma di questo thread
    http://forum.html.it/forum/showthrea...readid=1365336

    Ho finito di compilarlo ma c'è un errore nella lettura, praticamente qualsiasi mese do come input mi legge (e stampa) sempre gennaio.
    Probabilmente ho dimenticato, o messo qualcosa di troppo ma non riesco a trovarlo, dateci uno sguardo con i vostri occhietti freschi pls.

    codice:
    #include <stdio.h>
        int main ()
        {
        char*nm[]={"gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"};
        int gg, mm, aa;
        printf("Inserire data nel formato gg/mm/aa: ");
        scanf("%d%d%d", &gg, &mm, &aa);
        
        
        if((aa % 4 == 0 && aa % 100 != 0) || aa % 400 == 0){
                if(mm = 2){
                if(gg > 29){
                printf("Data non valida\n");
                return 0;
        }
         }
          }
          if(gg > 31){
          printf("Data non valida\n");
          return 0;
          }
          
          if(mm = 2){
          if(gg > 28){
          printf("Data non valida\n");
          return 0;
       }
          }
          if(mm = 1,4,6,9,11){
          if(gg > 30){
          printf("Data non valida\n");
          return 0;
       }
         }
        printf("%d/%d/%d\n", gg,mm,aa);
        printf("%d/%s/%d\n", gg,nm[mm-1],aa);
        return 0;
        }

  2. #2
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    ma sbaglio o sei il tizio che nell'altro thread si lamentava dei modi di oregon?

    rispondi ad un paio di domande (se non sai rispondere ti prego di cercare sul libro e non fare un copia/incolla della domanda su google ):
    - sai la differenza tra = e ==?
    - sai cos'è la logica booleana?

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    15
    Originariamente inviato da ant_alt
    ma sbaglio o sei il tizio che nell'altro thread si lamentava dei modi di oregon?

    rispondi ad un paio di domande (se non sai rispondere ti prego di cercare sul libro e non fare un copia/incolla della domanda su google ):
    - sai la differenza tra = e ==?
    - sai cos'è la logica booleana?
    Si sono io, ho aperto questo topic proprio perchè mi è stato detto di fare così.
    = è un operatore di assegnamento (se x=2 ecc..)
    == si usa per le uguaglianze

    la logica booleana so cosa è a grandi linee e credo anche di aver intuito cosa vuoi dirmi(operatore or?) ma non saprei spiegartela senza un po' di google fu

  4. #4
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    Originariamente inviato da Janbure
    Si sono io, ho aperto questo topic proprio perchè mi è stato detto di fare così.
    = è un operatore di assegnamento (se x=2 ecc..)
    == si usa per le uguaglianze

    la logica booleana so cosa è a grandi linee e credo anche di aver intuito cosa vuoi dirmi(operatore or?) ma non saprei spiegartela senza un po' di google fu
    -ok conosci la differenza, quindi hai visto gli errori?
    x=2 // assegni valore 2 ad x
    x==2 // è un "test": verifichi se il valore di x è uguale a 2, se si il test restituisce TRUE, altrimenti FALSE

    -come ho spiegato nell'altro thread OR serve per concatenare più condizioni:
    mi spieghi secondo te, secondo la sintassi C, che vuol dire "if(mm = 1,4,6,9,11)"

    correggi questi errori di sintassi e il programma è fatto

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    15
    gli = non li avevo proprio visti
    quindi la sintassi corretta è
    codice:
    if((mm==1)||(mm==4)||(mm==6)||(mm==9)||(mm==11)){
    secondo voi devo mettere anche la condizione mm<12 o è sottinteso?

  6. #6
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    Originariamente inviato da Janbure
    secondo voi devo mettere anche la condizione mm<12 o è sottinteso?
    che vuol dire sottinteso?se vuoi metterlo lo metti, certo è che se mese=13 il mese come stringa non lo stampa..

    codice:
    #include <stdio.h>
        int main ()
        {
        char*nm[]={"gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"};
        int gg, mm, aa;
        printf("Inserire data nel formato gg/mm/aa: ");
        scanf("%d%d%d", &gg, &mm, &aa);
        
        
        if((((aa % 4 == 0 && aa % 100 != 0) || aa % 400 == 0)&&mm==2&&gg>29)||
        gg>31||
        (mm==2&&gg>28)||
        ((mm ==1||mm==4||mm==6||mm==9||mm==11)&&gg>30)){
                printf("Data non valida\n");
                getchar();getchar();
                return 0;
                }
        printf("%d/%d/%d\n", gg,mm,aa);
        printf("%d/%s/%d\n", gg,nm[mm-1],aa);
        getchar();getchar();
        return 0;
        }
    prova a studiarti l'if che ho scritto riga per riga (l'ho diviso in righe per chiarezza, potrebbe stare tutto in una)nota le parentesi come sono messe, dove è possibile evitarle e studiati la priorità degli operandi

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Solo un paio di correzioni "estetiche" ...

    codice:
    #include <stdio.h>
        int main ()
        {
        char*nm[]={"gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"};
        int gg, mm, aa;
        printf("Inserire data nel formato gg/mm/aa: ");
        scanf("%d/%d/%d", &gg, &mm, &aa);
            
        if((((aa % 4 == 0 && aa % 100 != 0) || aa % 400 == 0)&&mm==2&&gg>29)||
        gg>31||
        (mm==2&&gg>28)||
        ((mm ==1||mm==4||mm==6||mm==9||mm==11)&&gg>30)){
                printf("Data non valida\n");
                getchar();getchar();
                return 0;
                }
        printf("%d/%d/%d\n", gg,mm,aa);
        printf("%d %s %d\n", gg,nm[mm-1],aa);
        getchar();getchar();
        return 0;
        }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.