dNt^ Δημοσ. 31 Δεκεμβρίου 2015 Δημοσ. 31 Δεκεμβρίου 2015 Καλησπέρα και χρόνια πολλά! Μας έχουν βάλει μια άσκηση για τις διακοπές για να κάνουμε εξάσκηση στην C. Η άσκηση είναι να διαβάσουμε μια χρονολογία και έναν μήνα και να εμφανίζουμε στον χρήστη πόσες ημέρες έχει ο μήνας αυτός (με δίσεκτα ή όχι έτη), με κατάλληλα μηνύματα σφάλματος όπου χρειάζεται (π.χ. αρνητικός μήνας/αρνητική χρονολογία, μήνας>12) Παρακάτω είναι ο κώδικας που έχω γράψει. /*Programma pou emfanizei tis imeres enos mina opoioudipote etous*/ #include <stdio.h> main () { int minas=0, etos=0, imeres=0; printf ("\n**** EURESI IMERWN TOU MINA OPOIOUDIPOTE ETOUS ****"); printf ("\n---------------------------------------------------"); printf ("\nParakalw dwste etos p.x. 1978: "); scanf ("%d", &etos); while (etos<=0) { printf ("\nO xronos pou valate einai lathos, parakalw ksanadoste : "); scanf ("%d", &etos); } printf ("\nParakalw dwste mina p.x. 10: "); scanf ("%d", &minas); while (minas<=0 && minas>=13) { printf ("\nO minas pou valate einai o %d kai einai lathos, parakalw ksanadwste : ", minas); scanf ("%d", &minas); } if (minas==4 || minas==6 || minas==9 || minas==11) { imeres=30; printf ("\nApantisi: \n\n O %d os minas tou etous %d eixe/exei %d imeres. \n\nTelos Programmatos", minas, etos, imeres); } else if (minas==1 || minas==3 || minas==5 || minas==7 || minas==8 || minas==10 || minas==12) { imeres=31; printf ("\nApantisi: \n\n O %d os minas tou etous %d eixe/exei %d imeres. \n\nTelos Programmatos", minas, etos, imeres); } else { if (etos%4==0 && etos%100!=0 && etos%400==0) { imeres=29; printf ("\nApantisi: \n\nO %d os minas tou etous %d (einai disekto etos) eixe/exei %d imeres.\n\nTelos Programmatos", minas, etos, imeres); } else { imeres=28; printf ("\nApantisi: \n\nO %d os minas tou etous %d (den einai disekto etos) eixe/exei %d imeres. \n\nTelos Programmatos", minas, etos, imeres); } } } Στην χρονολογία δεν μου εμφανίζει πρόβλημα και τρέχει κανονικά το Loop σε περίπτωση λάθους. Στον μήνα όμως, βγάζει πρόβλημα. Αν βάλω π.χ. αρνητικό μήνα, δεν λειτουργεί το Loop και μου εμφανίζει απάντηση. Kάποιος που να μπορεί να βοηθήσει? Thanks in advance
dNt^ Δημοσ. 31 Δεκεμβρίου 2015 Μέλος Δημοσ. 31 Δεκεμβρίου 2015 while (minas<=0 || minas>=13) Thanks, πρέπει να αλλάξω γυαλιά
defacer Δημοσ. 31 Δεκεμβρίου 2015 Δημοσ. 31 Δεκεμβρίου 2015 ^ Βασικά δηλαδή είναι ακριβώς το αντίθετο από αυτό που έπρεπε να γράψεις. By the way, είναι λάθος και η συνθήκη για τα δίσεκτα. Επίσης καθαρά σα θέμα προτίμησης αντί να έχεις έτσι το if/else θα μπορούσες να το γράψεις πολύ πιο κατανοητά IMO ως switch(minas) { case 1: // ιαν case 3: // μαρ case 5: // μαϊ case 7: // κλπ case 8: case 10: case 12: printf("31"); break; case 4: case 6: case 9: case 11: printf("30"); break; case 2: // μπλα μπλα υπολογίζεις δίσεκτο κλπ break; default: // λάθος μήνας που πας καραμήτρο } Είναι νομίζω πολύ πιο άμεσα κατανοητή η λογική του πώς προκύπτει ο αριθμός των μηνών γιατί ο κώδικας ακολουθεί πιστά αυτό που σου μαθαίνουν στο σχολείο. Ενώ η άλλη εκδοχή με τα else if κλπ ναι μεν καταλήγει στο ίδιο αποτέλεσμα αλλά αν θες να την "καταλάβεις" σαν αναγνώστης έχεις περισσότερη δουλειά να κάνεις.
παπι Δημοσ. 31 Δεκεμβρίου 2015 Δημοσ. 31 Δεκεμβρίου 2015 Βαλε και ενα int στη main. btw εγω θα σου ελεγα να την λυσεις με αλλο τροπο. Αυτο, με χρηση api
gon1332 Δημοσ. 31 Δεκεμβρίου 2015 Δημοσ. 31 Δεκεμβρίου 2015 Κι ένα return στη main, εκτός κι αν γράφεις C99.
bilakos10 Δημοσ. 2 Ιανουαρίου 2016 Δημοσ. 2 Ιανουαρίου 2016 Βαλε και ενα int στη main. btw εγω θα σου ελεγα να την λυσεις με αλλο τροπο. Αυτο, με χρηση api Πάνε δώσε άσκηση με χρήση non standard API και άμα δεν σου βάλει μηδέν χέσε με
Giorgos65ert Δημοσ. 4 Ιανουαρίου 2016 Δημοσ. 4 Ιανουαρίου 2016 Αν κάνατε Arrays θα μπορούσες κάπως έτσι να το κάνεις: #include <stdio.h> int main(){ int year,month,days[] = {31,29,31,30,31,30,31,31,30,31,30,31}; scanf("%i",&year); scanf("%i",&month); days[1] -= ((year%4)==0)?0:1; printf("%i/%i/%i",year,month,days[month]); return 0; } Τα καταλληλα μηνύματα λάθους/σφάλματος μπορείς να τα βάλεις και εσύ.
dNt^ Δημοσ. 4 Ιανουαρίου 2016 Μέλος Δημοσ. 4 Ιανουαρίου 2016 Βαλε και ενα int στη main. btw εγω θα σου ελεγα να την λυσεις με αλλο τροπο. Αυτο, με χρηση api Δεν είμαστε τόσο προχωρημένοι Κι ένα return στη main, εκτός κι αν γράφεις C99. Noted Αν κάνατε Arrays θα μπορούσες κάπως έτσι να το κάνεις: #include <stdio.h> int main(){ int year,month,days[] = {31,29,31,30,31,30,31,31,30,31,30,31}; scanf("%i",&year); scanf("%i",&month); days[1] -= ((year%4)==0)?0:1; printf("%i/%i/%i",year,month,days[month]); return 0; } Τα καταλληλα μηνύματα λάθους/σφάλματος μπορείς να τα βάλεις και εσύ. Δεν είμαστε τόσο προχωρημένοι
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα