Aggeluska Δημοσ. 28 Οκτωβρίου 2013 Δημοσ. 28 Οκτωβρίου 2013 καλησπερα , εφτιαχνα ενα προγραμ στν C το οποιο να κανει λογικεσ και Bitwise πραξεις. οι πιθανες επιλογες ειναι οι εξης: && || ~ & | ! λοιπον, εφτιαξα το προγραμμα με switch , δηλαδη να δινεις ποια πραξη θες , π.χ & ή || , και να σε πηγαινει στην αντιστοιχη case , και να κανει εκει την πραξη . Το προβλημα αρχικα ποθ αντημετωπισα ειναι οτι , οταν παταγα σαν operator το && ή || με πεταγε στην case & και |. οποτε σκεφτηκα οτι ειναι λογικο διοτι στο τυπο μεταβλητης char χωραει μονο μια τιμη , οποτε σκεφτικα να το κανω αλλιως. π.χ . operator = scanf("%c %c", &a, &; ετσι ωστε να δινω δυο χαρακτηρες π.χ & και & και να αποθηκευονται αντιστοιχα σε a και b και μετα και οι δυο μαζι στην μεταβλητη operator . Δυστυχως ομως δεν λειτουργει η "πατεντα" αυτη . μπορειτε να μου πειτε τι μπορω να κανω για να "xωρεσω" δυο χαρακτηρες σε μια μεταβλητη τυπου char? ευχαριστω
Star_Light Δημοσ. 28 Οκτωβρίου 2013 Δημοσ. 28 Οκτωβρίου 2013 Δεν γίνεται αυτο που ζητάς. Δηλαδη να χωρέσεις δυο χαρακτήρες σε μια μεταβλητή τύπου char. Μπορεις ομως να χρησιμοποιήσεις έναν πίνακα για να αποθηκεύσεις αυτα τα σύμβολα.
Aggeluska Δημοσ. 28 Οκτωβρίου 2013 Μέλος Δημοσ. 28 Οκτωβρίου 2013 ναι οκ δεν μπορω σε char , αλλα πως μπορω να κανω αυτο που θελω?
SpirosLouis Δημοσ. 28 Οκτωβρίου 2013 Δημοσ. 28 Οκτωβρίου 2013 Προτείνω να λύσεις το πρόβλημα σου δίνοντας στον χρήστη την επιλογή από μενού αριθμητικά. Κοίτα το παρακάτω παράδειγμα. (είναι σε c++ αλλά δώσε βάση στην DoMenu() συνάρτηση) http://www.eyrhka.gr/rec.cpp
Aggeluska Δημοσ. 28 Οκτωβρίου 2013 Μέλος Δημοσ. 28 Οκτωβρίου 2013 ναι το ξερω αυτο θα ηταν η ευκολη λυση , αλλα ο καθηγητης μου το θελει ετσι
Star_Light Δημοσ. 28 Οκτωβρίου 2013 Δημοσ. 28 Οκτωβρίου 2013 ναι το ξερω αυτο θα ηταν η ευκολη λυση , αλλα ο καθηγητης μου το θελει ετσι Τοτε θέλεις μια συνάρτηση η οποία διαβάζει παραπάνω απο έναν χαρακτήρες και σταματά μολις πατήσεις το ENTER. Δεν μου ερχεται κατι άλλο στο μυαλό.
lion2486 Δημοσ. 28 Οκτωβρίου 2013 Δημοσ. 28 Οκτωβρίου 2013 Κάτι της μορφής; scanf("%s", &str); a = str[0]; b = str[1]; //εαν είναι 1 μόνο χαρακτήρας αυτό θα είναι \0 ή \n switch(a){ case '&': if(b == '&') //make operation && else //make operation & break; case '|': if(b == '|') //make operation || else //make operation | break; }
Star_Light Δημοσ. 28 Οκτωβρίου 2013 Δημοσ. 28 Οκτωβρίου 2013 Mπορεις να χρησιμοποιήσεις επισης εναν πίνακα ο οποίος θα έχει σύνολο μέγιστο 3 στοιχεια. Μαζι με τον '\0'. Ουσιαστικα θα χειριστεις το && σαν string -> '&' , '&' , '\0'. Μετα θα ελεγχεις το δευτερο στοιχειο οπως σου εγραψε ο lion πιο πάνω. Καμια υποδειξη δινει ο καθηγητης? ΥΓ. Το δευτερο στοιχείο οτι και αν γινει ή θα ειναι κενό ή θα έχει εναν χαρακτήρα. Θέσε εξαρχης το symbols_arr[2] = '\0' ή αρχικοποιησε ολα τα στοιχεια του με symbols_arr[MAX_LEN] = {'\0'}. Πιο πριν ξές #define MAX_LEN 2 + 1 Aν σας έχει μαθει συμβολοσειρές αυτη ειναι η λυση που θα θέλει να δει.
migf1 Δημοσ. 28 Οκτωβρίου 2013 Δημοσ. 28 Οκτωβρίου 2013 ναι το ξερω αυτο θα ηταν η ευκολη λυση , αλλα ο καθηγητης μου το θελει ετσι Τι εννοείς εδώ; Δηλαδή ο καθηγητής σου σας έχει πει να αποθηκεύετε 2 char σε έναν; Δεν γίνεται, οπότε αποκλείεται να σας έχει πει τέτοιο πράγμα! Μπορεί όμως να σας έχει πει να αποθηκεύετε 2 char σε έναν int, το οποίο γίνεται, αλλά πολύ αμφιβάλλω ότι σας έχει ζητήσει κάτι τέτοιο. Αν όντως σας το έχει ζητήσει, ο ευκολότερος τρόπος είναι να χρησιμοποιήσεις τα fixed size data types της C99/C11 και πιο συγκεκριμένα να αποθηκεύεις τον ένα char στο low byte ενός int16_t και τον άλλο char στο high byte του int16_t. Αν πας να κάνεις κάτι τέτοιο με C90 και πίσω, το πιθανότερο είναι να βλαστημήσεις την ώρα και τη στιγμή, αν θέλεις το πρόγραμμά σου να τρέχει παντού και πάντα. Ξαναλέω όμως πως αμφιβάλλω έντονα ότι σας έχει ζητηθεί κάτι τέτοιο. Το πιθανότερο είναι να σας έχει ζητηθεί να διαβάζετε τους operators ως strings και κατόπιν αντί για switch που έχεις βάλει να έχετε μια σειρά από if-else με χρήση της συνάρτησης strcmp().
Aggeluska Δημοσ. 28 Οκτωβρίου 2013 Μέλος Δημοσ. 28 Οκτωβρίου 2013 Τι εννοείς εδώ; Δηλαδή ο καθηγητής σου σας έχει πει να αποθηκεύετε 2 char σε έναν; Δεν γίνεται, οπότε αποκλείεται να σας έχει πει τέτοιο πράγμα! Μπορεί όμως να σας έχει πει να αποθηκεύετε 2 char σε έναν int, το οποίο γίνεται, αλλά πολύ αμφιβάλλω ότι σας έχει ζητήσει κάτι τέτοιο. Αν όντως σας το έχει ζητήσει, ο ευκολότερος τρόπος είναι να χρησιμοποιήσεις τα fixed size data types της C99/C11 και πιο συγκεκριμένα να αποθηκεύεις τον ένα char στο low byte ενός int16_t και τον άλλο char στο high byte του int16_t. Αν πας να κάνεις κάτι τέτοιο με C90 και πίσω, το πιθανότερο είναι να βλαστημήσεις την ώρα και τη στιγμή, αν θέλεις το πρόγραμμά σου να τρέχει παντού και πάντα. Ξαναλέω όμως πως αμφιβάλλω έντονα ότι σας έχει ζητηθεί κάτι τέτοιο. Το πιθανότερο είναι να σας έχει ζητηθεί να διαβάζετε τους operators ως strings και κατόπιν αντί για switch που έχεις βάλει να έχετε μια σειρά από if-else με χρήση της συνάρτησης strcmp(). οχι εννοω οτι ο καθηγητης μας μας ζητησε το μενου να μην ειναι αριθμητικο αλλα να περιγιησαι στο μενου με & && | || ! ~, και οχι με 1 2 3 4 5 6
SpirosLouis Δημοσ. 28 Οκτωβρίου 2013 Δημοσ. 28 Οκτωβρίου 2013 Το άλλο που μπορώ να φανταστώ (the long way) είναι να πάρεις τις/την τιμή του χρήστη ως integers και να κάνεις τις συγκρίσεις ανάλογα με τον αριθμό που έχουνε στον ascii table. Του lion2486 είναι ότι πρέπει μάλλον.
migf1 Δημοσ. 28 Οκτωβρίου 2013 Δημοσ. 28 Οκτωβρίου 2013 οχι εννοω οτι ο καθηγητης μας μας ζητησε το μενου να μην ειναι αριθμητικο αλλα να περιγιησαι στο μενου με & && | || ! ~, και οχι με 1 2 3 4 5 6 Α οκ, οπότε το πιο εύκολο είναι να διαβάζεις τον τελεστή ως string, και κατόπιν να χρησιμοποιείς σε if-else την strcmp() για να συγκρίνεις την τιμή του τελεστή με την εκάστοτε επιθυμητή.
Aggeluska Δημοσ. 28 Οκτωβρίου 2013 Μέλος Δημοσ. 28 Οκτωβρίου 2013 οκ παιδια το βρηκα , χρησιμοποιησα το fflush(stdin); και το εκανα σε if statement τελικα . <script src="http://pastebin.com/embed_js.php?i=JkaHWJ6h"></script>
Star_Light Δημοσ. 28 Οκτωβρίου 2013 Δημοσ. 28 Οκτωβρίου 2013 Το άλλο που μπορώ να φανταστώ (the long way) είναι να πάρεις τις/την τιμή του χρήστη ως integers και να κάνεις τις συγκρίσεις ανάλογα με τον αριθμό που έχουνε στον ascii table. Του lion2486 είναι ότι πρέπει μάλλον. Κατι τέτοιο ειναι εντελώς λάθος διοτι διαφορετικα υπολογιστικά συστηματα μπορει να χρησιμοποιούν διαφορετικά σύνολα χαρακτήρων. οκ παιδια το βρηκα , χρησιμοποιησα το fflush(stdin); και το εκανα σε if statement τελικα . <script src="http://pastebin.com/embed_js.php?i=JkaHWJ6h"></script> Ναι αλλα 100 γραμμες κώδικα για κάτι τέτοιο? πολλες μου φαινονται δες τι σου έχει πει και ο migf1 σας έχει μιλησει για συμβολοσειρες ο καθηγητης σας? το λογικοτερο ολων ειναι ενω σας έχει μιλησει για συμβολοσειρες να θέλει υλοποιηση βασισμένη σε C-strings. Εγκυρες συμβολοσειρες της C δηλαδη που ειναι ουσιαστικα πινακες χαρακτηρων με το τέλος τους να ειναι ο '\0' στο τελευταιο στοιχειο του πίνακα.
Aggeluska Δημοσ. 28 Οκτωβρίου 2013 Μέλος Δημοσ. 28 Οκτωβρίου 2013 ευχαριστω πολυ για τον χρονο σας παιδια
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα