UltraB Δημοσιεύτηκε Ιανουάριος 22, 2016 #1 Δημοσιεύτηκε Ιανουάριος 22, 2016 Μπορεί να μου πεις κάποιος (σε pm για να μην μας πάρει στο κυνηγητό ο γατούλης) γιατί δε παίζει το παρακάτω; Θέλω να διαβάζω μια συμβολοσειρά όσο είναι μικρότερη από το a, και μεγαλύτερη από το b.do { scanf ("%s",pin); m = strlen (pin); printf ("%d",m);}while (m<a && m>;
nucleus Ιανουάριος 22, 2016 #2 Ιανουάριος 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>; Μιας και παρακολουθούνται τα PM
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 δουλεύει
nucleus Ιανουάριος 25, 2016 #6 Ιανουάριος 25, 2016 Θέλεις να ισχύουν και οι δύο περιπτώσεις? 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.
UltraB Ιανουάριος 25, 2016 Author #7 Ιανουάριος 25, 2016 Θέλω να ισχύουν και οι δύο περιπτώσεις. Το άλλαξα από and σε or και όλα καλά. Απλά με μπέρδεψε επειδή έλεγε να είναι μεταξύ των αριθμών και θεώρησα ότι ήθελε and.
nucleus Ιανουάριος 25, 2016 #8 Ιανουάριος 25, 2016 Μα δεν υπάρχει περίπτωση ένας αριθμός να είναι μικρότερος του a = 5 και ταυτόχρονα μεγαλύτερος του b = 10 (m<a && m>, αυτό έπρεπε να σε κάνει να καταλάβεις ότι το && στην συνθήκη ήταν λάθος. Η θα είναι μικρότερος του a ή μεγαλύτερος του b. H αποδεκτή είσοδος είναι να είναι ανάμεσα στο a και στο b το μήκος της συμβολοσειράς που εισάγεται από την κονσόλα?
UltraB Ιανουάριος 25, 2016 Author #9 Ιανουάριος 25, 2016 Γίνεται με κάποιο τρόπο να γίνει με and; Ρωτάω γιατί σπάω το κεφάλι μου να θυμηθώ που μας ζητούσε και τι, να γίνει με and και δε μπορώ. Τέλος πάντων, αφορούσε ένα τεστακι το οποίο το ξαναέλυσα μετά σπίτι (χωρίς εκφώνηση κτλ, απλά ότι θυμόμουν) για να δω περίπου αν είναι σωστά αυτά που έκανα.
nucleus Ιανουάριος 25, 2016 #10 Ιανουάριος 25, 2016 Αν δεν θυμάσαι ακριβώς την εκφώνηση δεν έχω ιδέα αν μπορεί να γίνει και με 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]);
Recommended Posts
Archived
This topic is now archived and is closed to further replies.