UltraB Δημοσιεύτηκε Ιανουάριος 22, 2016 #1 Κοινοποίηση Δημοσιεύτηκε Ιανουάριος 22, 2016 Μπορεί να μου πεις κάποιος (σε pm για να μην μας πάρει στο κυνηγητό ο γατούλης) γιατί δε παίζει το παρακάτω; Θέλω να διαβάζω μια συμβολοσειρά όσο είναι μικρότερη από το a, και μεγαλύτερη από το b.do { scanf ("%s",pin); m = strlen (pin); printf ("%d",m);}while (m<a && m>; Link to comment Share on other sites More sharing options...
nucleus Ιανουάριος 22, 2016 #2 Κοινοποίηση Ιανουάριος 22, 2016 (edited) Σε εμένα παίζει κανονικά πάντως και off we go. Άκυρο σκάει lol. @UltraB, malloc για το pin κάνεις? need malloc για το b + 1. int m; int a = 10; int b = 5; char* pin =(char *) malloc(b + 1); do { scanf("%s", pin); m = strlen(pin); printf("%d", m); } while (m<a && m>; Μιας και παρακολουθούνται τα PM Έγινε επεξεργασία Ιανουάριος 22, 2016 από nucleus 1 Link to comment Share on other sites More sharing options...
nucleus Ιανουάριος 22, 2016 #3 Κοινοποίηση Ιανουάριος 22, 2016 Μα γιατί δεν τα αφήσατε στο ΠΟΘ 1 Link to comment Share on other sites More sharing options...
astrolabos Ιανουάριος 22, 2016 #4 Κοινοποίηση Ιανουάριος 22, 2016 για να ρωτάς 2 Link to comment Share on other sites More sharing options...
UltraB Ιανουάριος 22, 2016 Author #5 Κοινοποίηση Ιανουάριος 22, 2016 Σε εμένα παίζει κανονικά πάντως και off we go. Άκυρο σκάει lol. @UltraB, malloc για το pin κάνεις? need malloc για το b + 1. int m; int a = 10; int b = 5; char* pin =(char *) malloc(b + 1); do { scanf("%s", pin); m = strlen(pin); printf("%d", m); } while (m<a && m>; Γιατί να κάνω malloc; Ο κώδικας είναι ο παρακάτω int i, m, a=5, b = 10; char pin[20]; do { scanf ("%s",pin); m = strlen (pin); printf ("%d",m); } while (m<a && m>; for (i=0;i<=m;i++) printf("%c",pin[i]); Ούτε αυτό που μου έστειλες με τη malloc δουλεύει Link to comment Share on other sites More sharing options...
nucleus Ιανουάριος 25, 2016 #6 Κοινοποίηση Ιανουάριος 25, 2016 (edited) Θέλεις να ισχύουν και οι δύο περιπτώσεις? m < a και m>b ή μια από τις δύο? Δεν παίζει επειδή αν βάλεις σαν είσοδο το "asdf" το m παίρνει την τιμή 4. Μετά ελέγχει το while. m < a με m = 4 a = 5 βγάζει true. m > b με m = 4 και b = 10 βγάζει false. Κάνοντας && έχουμε true && false δηλαδή false οπότε δεν μπαίνει ξανά στο do. Έγινε επεξεργασία Ιανουάριος 25, 2016 από nucleus 1 Link to comment Share on other sites More sharing options...
UltraB Ιανουάριος 25, 2016 Author #7 Κοινοποίηση Ιανουάριος 25, 2016 Θέλω να ισχύουν και οι δύο περιπτώσεις. Το άλλαξα από and σε or και όλα καλά. Απλά με μπέρδεψε επειδή έλεγε να είναι μεταξύ των αριθμών και θεώρησα ότι ήθελε and. Link to comment Share on other sites More sharing options...
nucleus Ιανουάριος 25, 2016 #8 Κοινοποίηση Ιανουάριος 25, 2016 Μα δεν υπάρχει περίπτωση ένας αριθμός να είναι μικρότερος του a = 5 και ταυτόχρονα μεγαλύτερος του b = 10 (m<a && m>, αυτό έπρεπε να σε κάνει να καταλάβεις ότι το && στην συνθήκη ήταν λάθος. Η θα είναι μικρότερος του a ή μεγαλύτερος του b. H αποδεκτή είσοδος είναι να είναι ανάμεσα στο a και στο b το μήκος της συμβολοσειράς που εισάγεται από την κονσόλα? Link to comment Share on other sites More sharing options...
UltraB Ιανουάριος 25, 2016 Author #9 Κοινοποίηση Ιανουάριος 25, 2016 Γίνεται με κάποιο τρόπο να γίνει με and; Ρωτάω γιατί σπάω το κεφάλι μου να θυμηθώ που μας ζητούσε και τι, να γίνει με and και δε μπορώ. Τέλος πάντων, αφορούσε ένα τεστακι το οποίο το ξαναέλυσα μετά σπίτι (χωρίς εκφώνηση κτλ, απλά ότι θυμόμουν) για να δω περίπου αν είναι σωστά αυτά που έκανα. Link to comment Share on other sites More sharing options...
nucleus Ιανουάριος 25, 2016 #10 Κοινοποίηση Ιανουάριος 25, 2016 (edited) Αν δεν θυμάσαι ακριβώς την εκφώνηση δεν έχω ιδέα αν μπορεί να γίνει και με AND. Εξαρτάται ποιά είναι η αποδεκτή είσοδος. Αν η αποδεκτή σου είσοδος είναι να είναι μικρότερο του a ή μεγαλύτερο του b τότε μπορείς να το κάνεις με and ως εξήςdo { ....} while (m > a && m < Κοινώς αν δίνει είσοδο με μήκος ανάμεσα στα a και b απόρριψε την. Αν η αποδεκτή σου είσοδος είναι να είναι μικρότερο του a και μεγαλύτερο του b αυτό δεν στέκει λογικά με a < b. Αν ωστόσο a > b τότε η συνθήκη m <a && m > b μπορεί να γίνει true αν η τιμή του m βρίσκεται ανάμεσα στα b < m < a. Δοκίμασε το παραπάνω αλλάζοντας τις τιμές των a και b στον κώδικα σουint i, m, a=10, b = 5; char pin[20]; do { scanf ("%s",pin); m = strlen (pin); printf ("%d",m); } while (m<a && m>; for (i=0;i<=m;i++) printf("%c",pin[i]); Έγινε επεξεργασία Ιανουάριος 25, 2016 από nucleus 3 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now