yannis27gr Δημοσ. 27 Φεβρουαρίου 2023 Δημοσ. 27 Φεβρουαρίου 2023 Γράφω ένα απλό πρόγραμμα όπου πατάς πλήκτρα και όταν πατηθεί το πλήκτρο Esc γίνεται έξοδος από το πρόγραμμα και σου λέει πόσοι ελληνικοί και πόσοι λατινικοί χαρακτήρες πατήθηκαν. Δε μου μετράει τα ελληνικά όμως ενώ με τους λατινικούς χαρακτήρες δεν έχω πρόβλημα. Τι κάνω λάθος; Ο κώδικας είναι αυτός: main() { system("chcp 1253>nul"); char ch; int gr=0,lat=0; do { ch=getch(); if (ch>=65&&ch<=90||ch>=97&&ch<=122) lat++; if (ch>=128&&ch<=175||ch>=224) gr++; } while (ch!=27); printf("\nΠληκτρολογήθηκαν %d ελληνικοί χαρακτήρες!",gr); printf("\nΠληκτρολογήθηκαν %d λατινικοί χαρακτήρες!",lat); }
Tony_Dim_ Δημοσ. 27 Φεβρουαρίου 2023 Δημοσ. 27 Φεβρουαρίου 2023 4 ώρες πριν, yannis27gr είπε Δε μου μετράει τα ελληνικά όμως ενώ με τους λατινικούς χαρακτήρες δεν έχω πρόβλημα. Τι κάνω λάθος; Έλεγξε αν υπάρχουν ελληνικοί χαρακτήρες στον πίνακα κωδικών που χρησιμοποιείς
yannis27gr Δημοσ. 27 Φεβρουαρίου 2023 Μέλος Δημοσ. 27 Φεβρουαρίου 2023 4 λεπτά πριν, Tony_Dim_ είπε Έλεγξε αν υπάρχουν ελληνικοί χαρακτήρες στον πίνακα κωδικών που χρησιμοποιείς Πώς το κάνω αυτό; Σύμφωνα με τον ASCII πίνακα που συμβουλεύομαι, τα ελληνικά ξεκινούν από την 128η θέση.
Tony_Dim_ Δημοσ. 27 Φεβρουαρίου 2023 Δημοσ. 27 Φεβρουαρίου 2023 1 ώρα πριν, yannis27gr είπε Πώς το κάνω αυτό; Σύμφωνα με τον ASCII πίνακα που συμβουλεύομαι, τα ελληνικά ξεκινούν από την 128η θέση. Εε ναι .. Σύμφωνα μ' αυτό εδώ όμως, στην θέση 128 δεν υπάρχει ελληνικό γράμμα Ζήτησε να σου τυπώσει την θέση 128 .. Και δες τι περιέχει ή καλύτερα, ζήτα να σου τυπώσει όλες τις θέσεις, και από εκεί θα επιλέξεις τα ελληνικά .. αν υπάρχουν
yannis27gr Δημοσ. 27 Φεβρουαρίου 2023 Μέλος Δημοσ. 27 Φεβρουαρίου 2023 (επεξεργασμένο) Πράγματι, στη θέση 193 ξεκινούν τα ελληνικά. Γιατί συμβαίνει αυτό; Είναι θέμα υπολογιστή; Αν πάω σε άλλο πισι και εκτυπώσω τον ascii table θα βρω σε άλλη θέση τους ελληνικούς χαρακτήρες; Παρεμπιπτόντως, παρόλο που βάζω τα σωστά νούμερα, επιμένει να μου βγάζει 0 στον αριθμό των ελληνικών χαρακτήρων (ενώ δουλεύει μια χαρά στους λατινικούς). Μάλιστα, για δοκιμή, στο 2ο if εβαλα να μετράει κάθε χαρακτήρα από 128-256, και πάλι τζίφος όμως. Μόλις γυρνάω το πληκτρολόγιο στα ελληνικά, παύει να διαβάζει και μένει κολλημένο στο 0. Επεξ/σία 27 Φεβρουαρίου 2023 από yannis27gr
Tony_Dim_ Δημοσ. 27 Φεβρουαρίου 2023 Δημοσ. 27 Φεβρουαρίου 2023 58 λεπτά πριν, yannis27gr είπε Πράγματι, στη θέση 193 ξεκινούν τα ελληνικά. Γιατί συμβαίνει αυτό; Δεν έχω ιδέα .. Λοιπόν δες εδώ Στις δοκιμές που έκανα, τα ελληνικά εμφανίζονται από την θέση 130 για το γράμμα Α Σε αυτό το λινκ εδώ έγραψα ένα κώδικα για να δεις αναλυτικά τις εκτυπώσεις στο on line compiler δεν εμφανίζονται τα ελληνικά , οπότε αν θέλεις να τα δεις, θα πρέπει να το τρέξεις στον υπολογιστή σου
yannis27gr Δημοσ. 27 Φεβρουαρίου 2023 Μέλος Δημοσ. 27 Φεβρουαρίου 2023 Δεν έχω πρόβλημα να δω αναλυτικά τον πίνακα ascii στον υπολογιστή. Το αρχικό ερώτημα παραμένει: Έχει κάποιο λάθος ο κώδικας μου; Γιατί έτσι όπως είναι γραμμένος λειτουργεί όταν πληκτρολογώ λατινικούς χαρακτήρες (δηλαδή μετράει πόσα πλήκτρα πάτησα μέχρι το escape όπου και κάνει έξοδο) αλλά δεν μετράει ελληνικούς.
dimitris234 Δημοσ. 27 Φεβρουαρίου 2023 Δημοσ. 27 Φεβρουαρίου 2023 Οι κωδικοι συγκρισης για τα ελληνικα αντιστοιχουν σε cp 737 και οχι 1253.
yannis27gr Δημοσ. 28 Φεβρουαρίου 2023 Μέλος Δημοσ. 28 Φεβρουαρίου 2023 (επεξεργασμένο) 9 ώρες πριν, dimitris234 είπε Οι κωδικοι συγκρισης για τα ελληνικα αντιστοιχουν σε cp 737 και οχι 1253. Ευχαριστώ για την απάντηση. Δοκίμασα να αντικαταστήσω το 1253 με το 737 (δηλαδή: system("chcp 737>nul"); αντί για system("chcp 1253>nul");) και επιμένει να βγάζει 0 στον αριθμό των ελληνικών, επιπλέον έγιναν τα πράγματα χειρότερα καθώς εκτύπωνε ακαταλαβίστικους χαρακτήρες αντί για ελληνικά. Επεξ/σία 28 Φεβρουαρίου 2023 από yannis27gr
dimitris234 Δημοσ. 28 Φεβρουαρίου 2023 Δημοσ. 28 Φεβρουαρίου 2023 Καλυτερα να χρησιμοποιησεις το 1253 (το 737 χρησιμευει μονο για καποιες εφαρμογες DOS). Επισης τα ορια για char μπορει να ειναι [-127,127] η [0,255] αναλογα με τις ρυθμισεις του compiler. Αν οι ρυθμισεις ειναι για αρνητικες τιμες πρεπει να αλλαξεις και τη συγκριση.
Tony_Dim_ Δημοσ. 28 Φεβρουαρίου 2023 Δημοσ. 28 Φεβρουαρίου 2023 (επεξεργασμένο) 16 ώρες πριν, yannis27gr είπε Δεν έχω πρόβλημα να δω αναλυτικά τον πίνακα ascii στον υπολογιστή. Η απάντηση μου αφορούσε το ερώτημα ... 19 ώρες πριν, yannis27gr είπε Πώς το κάνω αυτό; για την πρόταση... 20 ώρες πριν, Tony_Dim_ είπε Έλεγξε αν υπάρχουν ελληνικοί χαρακτήρες στον πίνακα κωδικών που χρησιμοποιείς ================== οκ ... Πάμε παρακάτω Επειδή στο μεταξύ προσπαθώ κι εγώ να λύσω την άσκηση, έχω καταλήξει στο συμπέρασμα ότι για κάποιο λόγο δεν "βλέπει" το σύστημα τα ελληνικά -- Παραξενιές της C ή δικό μας λάθος Κι εδώ έχω γράψει ένα κώδικα που διαβάζει ελληνικά ή και αγγλικά σε μια γραμμή, και μετράει τους χαρακτήρες, αλλά στο on line compiler δεν λειτουργεί για ελληνικά - Μπορείς να γράψεις και κενά Επεξ/σία 28 Φεβρουαρίου 2023 από Tony_Dim_
nkarama Δημοσ. 28 Φεβρουαρίου 2023 Δημοσ. 28 Φεβρουαρίου 2023 Προτείνω να χρησιμοποιήσεις unsigned int για να διαβάζεις το πληκτρολόγιο, για να αποφύγεις και τις ..κακοτοπιές... Επίσης γιατί δεν τον βάζεις να τυπώσει τις ASCII τιμές για τους Ελληνικούς χαρακτήρες όπως αυτοί παράγονται απο το πλητρολόγιό σου?
yannis27gr Δημοσ. 28 Φεβρουαρίου 2023 Μέλος Δημοσ. 28 Φεβρουαρίου 2023 (επεξεργασμένο) 1 ώρα πριν, Tony_Dim_ είπε Επειδή στο μεταξύ προσπαθώ κι εγώ να λύσω την άσκηση, έχω καταλήξει στο συμπέρασμα ότι για κάποιο λόγο δεν "βλέπει" το σύστημα τα ελληνικά -- Παραξενιές της C ή δικό μας λάθος Κι εδώ έχω γράψει ένα κώδικα που διαβάζει ελληνικά ή και αγγλικά σε μια γραμμή, και μετράει τους χαρακτήρες, αλλά στο on line compiler δεν λειτουργεί για ελληνικά - Μπορείς να γράψεις και κενά Δηλαδή παίζει να τα κάνω όλα σωστά και πάλι να μη δουλεύει το πρόγραμμα γιατί... έτσι; Από σκέτη παραξενιά; Άμα το ξερα ότι η C θα έμοιαζε με το γάμο μου, δε θα έμπλεκα μαζί της... 😛 43 λεπτά πριν, nkarama είπε Προτείνω να χρησιμοποιήσεις unsigned int για να διαβάζεις το πληκτρολόγιο, για να αποφύγεις και τις ..κακοτοπιές... Επίσης γιατί δεν τον βάζεις να τυπώσει τις ASCII τιμές για τους Ελληνικούς χαρακτήρες όπως αυτοί παράγονται απο το πλητρολόγιό σου? Το έκανα, γι αυτό και στο 3ο μήνυμα λέω ότι τα ελληνικά ξεκινάνε από τη θέση 193. Δεν τα βλέπει όμως. Δοκίμασα και με unsigned. Τζίφος. Επεξ/σία 28 Φεβρουαρίου 2023 από yannis27gr
Tony_Dim_ Δημοσ. 28 Φεβρουαρίου 2023 Δημοσ. 28 Φεβρουαρίου 2023 (επεξεργασμένο) 2 ώρες πριν, yannis27gr είπε Δηλαδή παίζει να τα κάνω όλα σωστά και πάλι να μη δουλεύει το πρόγραμμα γιατί... έτσι; Από σκέτη παραξενιά; Άμα το ξερα ότι η C θα έμοιαζε με το γάμο μου, δε θα έμπλεκα μαζί της... 😛 Η αλήθεια είναι ότι, με όποια γλώσσα και αν μπλέξεις, τις παραξενιές δεν θα τις αποφύγεις, και η κάθε μια έχει τις δικές της. Δεν ρώτησα γιατί ασχολείσαι με C, δεν με αφορά κιόλας, αλλά αφού έφτασες μέχρι την συνάρτηση getch() υποθέτω ότι έχεις προχωρήσει αρκετά και δεν αξίζει να την παρατήσεις για τα λίγα μαθήματα που απομένουν μέχρι το τέλος. Αν τώρα, υποθετικά μιλώντας, ασχολείσαι από χόμπυ και δεν έχεις κάποια σχολή να σου επιβάλει να μάθεις την C, θα πρότεινα να δοκίμαζες και την Python 3.7 είτε και την Object Pascal 2.0.6 Με την Python θα μπορέσεις να κάνεις επεξεργασία σε string πολύ πιο εύκολα απ ότι στην C .. το έχεις εμπεδώσει οκ 😀 .. και μπορείς να την κατεβάσεις από εδώ Με την Object Pascal θα μπορέσεις να φτιάξεις εκτός από προγράμματα consolas και προγράμματα για παραθυρικό περιβάλλον, τα λεγόμενα και Application ή εφαρμογές, και μάλιστα πάρα πολύ εύκολα, σε σχέση με άλλες γλώσσες -- Ψάξε για Lazarus IDE 2.0.6 ή δες εδώ Αν χρειαστείς μαθήματα κλπ .. γράψε εδώ τι χρειάζεσαι και .. τα λέμε Επεξ/σία 28 Φεβρουαρίου 2023 από Tony_Dim_ 1
Λύση marios28 Δημοσ. 28 Φεβρουαρίου 2023 Λύση Δημοσ. 28 Φεβρουαρίου 2023 δήλωσε αντί για char ch -> int ch; μην αλλάξεις τίποτα άλλο από τον αρχικό σου κώδικα 2
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα