Jump to content



Κώδικας για ανάγνωση συμβολοσειράς εντός ορίων


UltraB

Recommended Posts

Μπορεί να μου πεις κάποιος (σε pm για να μην μας πάρει στο κυνηγητό ο γατούλης) γιατί δε παίζει το παρακάτω;

 

Θέλω να διαβάζω μια συμβολοσειρά όσο είναι μικρότερη από το a, και μεγαλύτερη από το b.

do {	scanf ("%s",pin);	m = strlen (pin);	printf ("%d",m);}while (m<a && m>;
Link to comment
Share on other sites

Σε εμένα παίζει κανονικά πάντως και off we go. Άκυρο σκάει lol.

 

@UltraB,

 

malloc για το pin κάνεις? :p 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 :)

Έγινε επεξεργασία από nucleus
  • Like 1
Link to comment
Share on other sites

Σε εμένα παίζει κανονικά πάντως και off we go. Άκυρο σκάει lol.

 

@UltraB,

 

malloc για το pin κάνεις? :p 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 δουλεύει :p

Link to comment
Share on other sites

Θέλεις να ισχύουν και οι δύο περιπτώσεις? 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.

Έγινε επεξεργασία από nucleus
  • Like 1
Link to comment
Share on other sites

Μα δεν υπάρχει περίπτωση ένας αριθμός να είναι μικρότερος του a = 5 και ταυτόχρονα μεγαλύτερος του b = 10 (m<a && m>B), αυτό έπρεπε να σε κάνει να καταλάβεις ότι το && στην συνθήκη ήταν λάθος. Η θα είναι μικρότερος του a ή μεγαλύτερος του b. H αποδεκτή είσοδος είναι να είναι ανάμεσα στο a και στο b το μήκος της συμβολοσειράς που εισάγεται από την κονσόλα?

Link to comment
Share on other sites

Γίνεται με κάποιο τρόπο να γίνει με and; Ρωτάω γιατί σπάω το κεφάλι μου να θυμηθώ που μας ζητούσε και τι, να γίνει με and και δε μπορώ.

 

Τέλος πάντων, αφορούσε ένα τεστακι το οποίο το ξαναέλυσα μετά σπίτι (χωρίς εκφώνηση κτλ, απλά ότι θυμόμουν) για να δω περίπου αν είναι σωστά αυτά που έκανα.

Link to comment
Share on other sites

Αν δεν θυμάσαι ακριβώς την εκφώνηση δεν έχω ιδέα αν μπορεί να γίνει και με 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]);
Έγινε επεξεργασία από nucleus
  • Like 3
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Δημιουργία...

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.