Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

getche() σε integer...πως?

Îåêßíçóå áðü ôï ìÝëïò grglaz. Τελευταία δημοσίευση από το μέλος tasos στις 21-04-2009, 15:20. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  16-04-2009, 23:49 50124

    getche() σε integer...πως?

    Καλησπερα

    Θελω να χρησιμοπιησω την getche() σε μια integer μεταβλητη αλλα μου τυπωνει τον ascii του αριθμου και οχι τον ιδιο τον αριθμο.

    Σ αυτο εδω το παραδειγμα αν πληκτρολογησω το 5 θα μου τυπωσει τον αριθμο 53

    #include "stdafx.h"
    #include "conio.h"
    #include <cstdlib>
    #include <iostream>
    using namespace std;


    int main()
    {
        cout<<"type something\n";
        int x;
        x=getche();
        cout<<x;
        system("pause");
       
    }

    Τι πρεπει να κανω για να παιρνει το χ τον αριθμο που πληκτρολογω και οχι τον ascii του αριθμου?
    Η αν δεχτω οτι καταχωρειται ο ascii αναγκαστηκα,υπαρχει καποιος τροπος να τον μετατρεπω σε κανονικο αριθμο?
    Δημοσίευση στην κατηγορία:
  •  17-04-2009, 15:05 50143 σε απάντηση της 50124

    Απ: getche() σε integer...πως?

    Δοκίμασες την atoi(); Κάνει μετατροπή από αλφαριθμητικό σε αριθμό. (alpha to integer).

    Δες εδώ για το πως δουλεύει.


    Τάσος Καραγιάννης

    Baby debugging steps...
  •  18-04-2009, 01:02 50145 σε απάντηση της 50143

    Απ: getche() σε integer...πως?

    Ειδα το παραδειγμα στην σελιδα που με παραπεμπεις αλλα για καποιο λογο αυτο:

    #include "stdafx.h"
    #include "conio.h"
    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include <stdlib.h>
    #include <stdio.h>
    int main()
    {
        int i;
        char z;
        cout<<"Type a number\n";
        z=getche();
        i = atoi (z);
        cout<<"\n"<<i<<"\n";
        system("pause");
    }
    δεν "παιζει".

    1)warning C4996: 'getche': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getche. See online help for details.
    2)error C2664: 'atoi' : cannot convert parameter 1 from 'char' to 'const char *'

    Επισης στο παραδειγμα της σελιδας καταχωρει αριθμο σε char μεταβλητη ενω εγω την getche την θελω πανω σε int.

    Μια αλλη λυση που διαβασα απο καπου ειναι αυτη

    #include "stdafx.h"
    #include "conio.h"
    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include <stdlib.h>
    #include <stdio.h>
    int main()
    {
        int ascii_x;
        cout<<"Type a number\n";
        ascii_x=getche();
        int x=ascii_x-'0';
        cout<<"\n"<<x<<"\n";
        system("pause");
    }
    η οποια δουλευει μεν αλλα δεν ξερω κατα ποσο ειναι και η πιο ορθοδοξη λυση.
    Να προσθεσω επι την ευκαιρια οτι αλλο ενα προβλημα που πρεπει να λυσω ειναι το πως θα μπορεσω χρησιμοποιωντας την getche παλι να εισαγω 2ψηφιο αριθμο η γενικοτερα οχι μονοψηφιο αφου με το που πατησω το πρωτο νουμερο το προγραμμα τρεχει παρακατω.Αν μπορει καποιος να μου προτεινει κατι....


  •  19-04-2009, 20:58 50147 σε απάντηση της 50145

    Απ: getche() σε integer...πως?

    Αυτό που κάνεις στο δεύτερο παράδειγμα λέγεται type casting. Είναι μια χαρά λύση, θα μπορούσες να το γράψεις κι έτσι:

    int x = (int) ascii_x;

    Η χρήση της getche() είναι υποχρεωτική; Ρωτάω γιατί υπάρχουν άλλες συναρτήσεις για να διαβάζεις δεδομένα από το πληκτρολόγιο και σου παρέχουν αρκετές ευκολίες. 

    Αν ναι, τότε πρέπει να σκαρφιστείς κάποιο αλγόριθμο με τον οποίο θα "χτίζεις" τον πολυψήφιο αριθμό σου. Δοκίμασε το εξής:

    int myint;
    
    myint = 0;
    ascii_x = getche();
    
    while(ascii_x != ' ') {
        myint = myint*10 + (int)ascii_x;
        ascii_x = getche();
    }
    Αυτό που κάνει ο κώδικας είναι να διαβάζει ένα ένα τα ψηφία και υπολογίζει τον αριθμό. Σταματάει όταν ο χρήστης πληκτρολογήσει το ' '. Η μεταβλητή myint περιέχει τον αριθμό αυτό. Μπορεί να έχω κάποια συντακτικά λάθη διότι δεν έχω Visual C/C++ για να είμαι σίγουρος ότι τρέχει. Πάντως η λογική είναι απλή. 



    Τάσος Καραγιάννης

    Baby debugging steps...
  •  20-04-2009, 15:05 50149 σε απάντηση της 50147

    Απ: getche() σε integer...πως?

    Τασο καταρχην ευχαριστω για τις απαντησεις σου...

    tasos:
    Αυτό που κάνεις στο δεύτερο παράδειγμα λέγεται type casting. Είναι μια χαρά λύση, θα μπορούσες να το γράψεις κι έτσι:

    int x = (int) ascii_x;

    Αν εννοεις αντι για int x=ascii_x-'0';  να γραψω int x = (int) ascii_x; , το δοκιμασα αλλα μου επιστρεφει τον ascii,πχ εβαλα το 2 και μου εκτυπωσε το 50.

    Τελικα χρησιμοποιησα την atoi,δεν μου δουλεψε την πρωτη φορα γιατι δεν ειχα βαλει το & στην παρενθεση,απλα αναγκαστηκα εισαγω τον αριθμο σε char και οχι σε int(χωρις να ειναι προβλημα αυτο).

    Οχι δεν εχω καποιο κολλημα με την getche απλα δεν γνωριζω καποιο αλλο τροπο για διαβασμα δεδομενων απο πληκτρολογιο χωρις την χρηση του enter και επειδη προκειται για μια πολυ απλη εφαρμογη calculator,ειναι προβλημα η χρηση του enter μετα απο καθε εισαγωγη δεδομενων.

    Αυτο το δοκιμασα και δουλευει κανονικα

    int myint;

    myint = 0;
    ascii_x = getche();

    while(ascii_x != ' ') {
    myint = myint*10 + (int)ascii_x;
    ascii_x = getche();
    }

    απλα δεν καταλαβα πως η Myint περιεχει τον αριθμο που πληκτρολογω αφου πολλαπλασιαζεται με το δεκα.
    Πως γινεται στην συνθηκη αυτη while(ascii_x != ' ') τον χαρακτηρα που θα πληκτρολογω για να φευγω απο τον βρονχο να τον χρησιμοποιω στην συνεχεια του προγραμματος προφανως σε εναν αλλο βρονχο αμεσως μετα?
    Θα βολευε δηλαδη να φευγω απο τον βρονχο μολις πατησω το '+' ας πουμε γιατι αν ειναι να παταω το space ειναι σαν να παταω το enter οποτε ενα και το αυτο.



  •  21-04-2009, 15:20 50169 σε απάντηση της 50149

    Απ: getche() σε integer...πως?

    grglaz:

    απλα δεν καταλαβα πως η Myint περιεχει τον αριθμο που πληκτρολογω αφου πολλαπλασιαζεται με το δεκα.
    Πως γινεται στην συνθηκη αυτη while(ascii_x != ' ') τον χαρακτηρα που θα πληκτρολογω για να φευγω απο τον βρονχο να τον χρησιμοποιω στην συνεχεια του προγραμματος προφανως σε εναν αλλο βρονχο αμεσως μετα?
    Θα βολευε δηλαδη να φευγω απο τον βρονχο μολις πατησω το '+' ας πουμε γιατι αν ειναι να παταω το space ειναι σαν να παταω το enter οποτε ενα και το αυτο.

    Το γιατί δουλεύει το while που έγραψα είναι απλό. Διαβάζει ένα ένα τα ψηφία, χωρίς να ξέρει αν το ψηφίο είναι μονάδα, δεκάδα, εκατοντάδα. Μόλις δώσεις ένα ακόμα ψηφίο, την μονάδα την κάνει δεκάδα, αν δώσεις και άλλο ψηφίο την δεκάδα θα την κάνει εκατοντάδα. Ελπίζω να κατάλαβες πως δουλεύει.

    Όταν βγαίνεις από το loop ο τελευταίος χαρακτήρας που έχεις διαβάσει είναι ο ' ', ο οποίος είναι αποθηκευμένος στη μεταβλητή ascii_x. Μπορείς να τον χρησιμοποιήσεις κανονικά. Δεν καταλαβαίνω τι πρόβλημα έχεις, αν θέλεις δώσε ένα παράδειγμα. Τη συνθήκη μπορείς να την αλλάξεις όπως σε βολεύει, να κοιτάει για παράδειγμα για το '+' και όχι για το ' ', μάλλον χρειάζεσαι μια πιο σύνθετη συνθήκη για να είναι λειτουργική για ένα calculator. 


    Τάσος Καραγιάννης

    Baby debugging steps...
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems