Προς το περιεχόμενο

Μέτρημα χαρακτήρων C


yannis27gr
Μετάβαση στην απάντηση Απαντήθηκε από marios28,

Προτεινόμενες αναρτήσεις

Γράφω ένα απλό πρόγραμμα όπου πατάς πλήκτρα και όταν πατηθεί το πλήκτρο 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);
}

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

4 ώρες πριν, yannis27gr είπε

Δε μου μετράει τα ελληνικά όμως ενώ με τους λατινικούς χαρακτήρες δεν έχω πρόβλημα. Τι κάνω λάθος;

Έλεγξε αν υπάρχουν ελληνικοί χαρακτήρες στον πίνακα κωδικών που χρησιμοποιείς

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

4 λεπτά πριν, Tony_Dim_ είπε

Έλεγξε αν υπάρχουν ελληνικοί χαρακτήρες στον πίνακα κωδικών που χρησιμοποιείς

 

Πώς το κάνω αυτό; Σύμφωνα με τον ASCII πίνακα που συμβουλεύομαι, τα ελληνικά ξεκινούν από την 128η θέση.970948492_.jpg.0bb130f6b7f6117afeee8cb02c98d3d2.jpg

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

1 ώρα πριν, yannis27gr είπε

Πώς το κάνω αυτό; Σύμφωνα με τον ASCII πίνακα που συμβουλεύομαι, τα ελληνικά ξεκινούν από την 128η θέση.

Εε ναι .. Σύμφωνα μ' αυτό εδώ όμως, στην θέση 128 δεν υπάρχει ελληνικό γράμμα

Ζήτησε να σου τυπώσει την θέση 128 .. Και δες τι περιέχει
ή καλύτερα, ζήτα να σου τυπώσει όλες τις θέσεις, και από εκεί θα επιλέξεις τα ελληνικά .. αν υπάρχουν

spacer.png

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Πράγματι, στη θέση 193 ξεκινούν τα ελληνικά. Γιατί συμβαίνει αυτό; Είναι θέμα υπολογιστή; Αν πάω σε άλλο πισι και εκτυπώσω τον ascii table θα βρω σε άλλη θέση τους ελληνικούς χαρακτήρες;

Παρεμπιπτόντως, παρόλο που βάζω τα σωστά νούμερα, επιμένει να μου βγάζει 0 στον αριθμό των ελληνικών χαρακτήρων (ενώ δουλεύει μια χαρά στους λατινικούς). Μάλιστα, για δοκιμή, στο 2ο if εβαλα να μετράει κάθε χαρακτήρα από 128-256, και πάλι τζίφος όμως. Μόλις γυρνάω το πληκτρολόγιο στα ελληνικά, παύει να διαβάζει και μένει κολλημένο στο 0.

Επεξ/σία από yannis27gr
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

58 λεπτά πριν, yannis27gr είπε

Πράγματι, στη θέση 193 ξεκινούν τα ελληνικά. Γιατί συμβαίνει αυτό;

Δεν έχω ιδέα .. Λοιπόν δες εδώ

Στις δοκιμές που έκανα, τα ελληνικά εμφανίζονται από την θέση 130 για το γράμμα Α

Σε αυτό το λινκ εδώ έγραψα ένα κώδικα για να δεις αναλυτικά τις εκτυπώσεις

στο on line compiler δεν εμφανίζονται τα ελληνικά , οπότε αν θέλεις να τα δεις, θα πρέπει να το τρέξεις στον υπολογιστή σου

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν έχω πρόβλημα να δω αναλυτικά τον πίνακα ascii στον υπολογιστή.

Το αρχικό ερώτημα παραμένει: Έχει κάποιο λάθος ο κώδικας μου; Γιατί έτσι όπως είναι γραμμένος λειτουργεί όταν πληκτρολογώ λατινικούς χαρακτήρες (δηλαδή μετράει πόσα πλήκτρα πάτησα μέχρι το escape όπου και κάνει έξοδο) αλλά δεν μετράει ελληνικούς.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
9 ώρες πριν, dimitris234 είπε

Οι κωδικοι συγκρισης για τα ελληνικα αντιστοιχουν σε cp 737 και οχι 1253.

Ευχαριστώ για την απάντηση. Δοκίμασα να αντικαταστήσω το 1253 με το 737 (δηλαδή: system("chcp 737>nul"); αντί για system("chcp 1253>nul");) και επιμένει να βγάζει 0 στον αριθμό των ελληνικών, επιπλέον έγιναν τα πράγματα χειρότερα καθώς εκτύπωνε ακαταλαβίστικους χαρακτήρες αντί για ελληνικά.

image.png.929e3bcd425c3e490274d215fcc16935.png

 

Επεξ/σία από yannis27gr
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Καλυτερα να χρησιμοποιησεις  το 1253 (το 737 χρησιμευει μονο για καποιες εφαρμογες DOS). Επισης τα ορια για char μπορει να ειναι [-127,127] η [0,255] αναλογα με τις ρυθμισεις του compiler. Αν οι ρυθμισεις ειναι για αρνητικες τιμες πρεπει να αλλαξεις και τη συγκριση.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
16 ώρες πριν, yannis27gr είπε

Δεν έχω πρόβλημα να δω αναλυτικά τον πίνακα ascii στον υπολογιστή.

Η απάντηση μου αφορούσε το ερώτημα ...

19 ώρες πριν, yannis27gr είπε

Πώς το κάνω αυτό;

για την πρόταση...

20 ώρες πριν, Tony_Dim_ είπε

Έλεγξε αν υπάρχουν ελληνικοί χαρακτήρες στον πίνακα κωδικών που χρησιμοποιείς

==================

οκ ... Πάμε παρακάτω

Επειδή στο μεταξύ προσπαθώ κι εγώ να λύσω την άσκηση, έχω καταλήξει στο συμπέρασμα ότι για κάποιο λόγο δεν "βλέπει" το σύστημα τα ελληνικά -- Παραξενιές της C   ή   δικό μας λάθος

Κι εδώ έχω γράψει ένα κώδικα που διαβάζει ελληνικά ή και αγγλικά σε μια γραμμή, και μετράει τους χαρακτήρες, αλλά στο on line compiler δεν λειτουργεί για ελληνικά - Μπορείς να γράψεις και κενά

 

 

 

 

Επεξ/σία από Tony_Dim_
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Προτείνω να χρησιμοποιήσεις unsigned int για να διαβάζεις το πληκτρολόγιο, για να αποφύγεις και τις ..κακοτοπιές... 

Επίσης γιατί δεν τον βάζεις να τυπώσει τις ASCII τιμές για τους Ελληνικούς χαρακτήρες όπως αυτοί παράγονται απο το πλητρολόγιό σου? 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
1 ώρα πριν, Tony_Dim_ είπε

Επειδή στο μεταξύ προσπαθώ κι εγώ να λύσω την άσκηση, έχω καταλήξει στο συμπέρασμα ότι για κάποιο λόγο δεν "βλέπει" το σύστημα τα ελληνικά -- Παραξενιές της C   ή   δικό μας λάθος

Κι εδώ έχω γράψει ένα κώδικα που διαβάζει ελληνικά ή και αγγλικά σε μια γραμμή, και μετράει τους χαρακτήρες, αλλά στο on line compiler δεν λειτουργεί για ελληνικά - Μπορείς να γράψεις και κενά

Δηλαδή παίζει να τα κάνω όλα σωστά και πάλι να μη δουλεύει το πρόγραμμα γιατί... έτσι; Από σκέτη παραξενιά; Άμα το ξερα ότι η C θα έμοιαζε με το γάμο μου, δε θα έμπλεκα μαζί της... 😛

 

43 λεπτά πριν, nkarama είπε

Προτείνω να χρησιμοποιήσεις unsigned int για να διαβάζεις το πληκτρολόγιο, για να αποφύγεις και τις ..κακοτοπιές... 

Επίσης γιατί δεν τον βάζεις να τυπώσει τις ASCII τιμές για τους Ελληνικούς χαρακτήρες όπως αυτοί παράγονται απο το πλητρολόγιό σου? 

Το έκανα, γι αυτό και στο 3ο μήνυμα λέω ότι τα ελληνικά ξεκινάνε από τη θέση 193. Δεν τα βλέπει όμως.

Δοκίμασα και με unsigned. Τζίφος.

Επεξ/σία από yannis27gr
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
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 ή δες εδώ

Αν χρειαστείς μαθήματα κλπ .. γράψε εδώ τι χρειάζεσαι και .. τα λέμε

Επεξ/σία από Tony_Dim_
  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...