Leite33 Δημοσ. 26 Σεπτεμβρίου 2008 Δημοσ. 26 Σεπτεμβρίου 2008 Καλημέρα Θέλω να ρωτήσω κάτι σε C.. Έχω φτιάξει ενα βρόχο να ελεγχει αν το κείμενό μου στο edit ειναι αριθμός η γραμμα για να αποκλειεί τα γράμματα... Το θέμα είναι πως θα αποκλείσω και τα σύμβολα (!,$,%, κλπ) με κάποιο βρόχο ώστε να μην έχω προβλήματα .. Θα χρειαστεί να τα αποκλείσω ένα ένα;;;; Παρακαλώ ιδέες
Aesmade Δημοσ. 26 Σεπτεμβρίου 2008 Δημοσ. 26 Σεπτεμβρίου 2008 Aπλώς ελέγχεις αν είναι αριθμός αντί να ελέγχεις αν είναι κάτι άλλο. > char *removenumbers(char *str) { int i,l=0; char *ret=(char*)malloc(strlen(str)+1); for (i=0;i<strlen(str);i++) if (str[i]>='0' && str[i]<='9') ret[l++]=str[i]; ret[l]=0; return ret; } (Δίνεις ένα string με αριθμούς και γράμματα και σου επιστρέφει μόνο τους αριθμούς)
Leite33 Δημοσ. 26 Σεπτεμβρίου 2008 Μέλος Δημοσ. 26 Σεπτεμβρίου 2008 Ωραια νομίζω το καταλαβα... Πληκρτολογεις στο edit για παραδειγμα 8θτ844 και σου γυρναει μονο τα νουμερα... καλη μαγκια...θα το δοκιμασω....ευχαριστω.. οποιαδήποτε άλλη ιδέα θα την εκτινούσα.
Directx Δημοσ. 26 Σεπτεμβρίου 2008 Δημοσ. 26 Σεπτεμβρίου 2008 Μιας και γράφεις σε C++ Builder είναι κρίμα να μην χρησιμοποιήσεις τις δυνατότητες που σου παρέχει η VCL class AnsiString οπότε ο κώδικας του Αesmade μπορεί να γραφθεί ως: > AnsiString KeepDigit(AnsiString strInput) { // Return strInput digits (to use isdigit #include <locale>) for(int nCharIdx = 1; nCharIdx <= strInput.Length(); nCharIdx++) if(!isdigit(strInput[nCharIdx])) strInput.Delete(nCharIdx--, 1); return strInput; } Επίσης μπορείς να εφαρμόσεις έναν έλεγχο κατά το πάτημα των πλήκτρων του TEdit ώστε να μην επιτρέπει την εισαγωγή μη αριθμητικών χαρακτήρων (εκτός του Backspace για ευνόητους λόγους), γράφοντας στο OnKeyPress event: > if(!isdigit(Key) && Key != VK_BACK) { MessageBeep(-1); Key = 0; } Σημ: Aυτή η δυνατότητα παρέχεται αυτόματα πια ως property στον TEdit του νέου C++ Builder 2009 Σημ #2: Αν θες να μπαίνουν αρνητικές τιμές μπορεί να χρειασθεί η υποστήριξη του χαρακτήρα - Τώρα αν ο χρήστης κάνει κάποια εξυπνάδα (πχ. επικόλληση μη αριθμητικού κειμένου) η KeepDigit function μπορεί να εξασφαλίσει το σωστό input των δεδομένων σου. Καλή συνέχεια.
alkisg Δημοσ. 27 Σεπτεμβρίου 2008 Δημοσ. 27 Σεπτεμβρίου 2008 Αντί για TEdit μπορείς να χρησιμοποιήσεις TMaskEdit και να του πεις να δέχεται μόνο νούμερα χωρίς προγραμματισμό.
Leite33 Δημοσ. 27 Σεπτεμβρίου 2008 Μέλος Δημοσ. 27 Σεπτεμβρίου 2008 Ωραία ευχαριστώ.. Directx κάτι τέτοιο είχα κάνει και γω..Υπάρχει C++ 2007 και C++2009??? Ενα πρόγραμμα C++ builder που είναι μεγάλο στην εγκατάσταση και αναφέρεται σαν codegear τι ειναι η c+ h 2009???? Δηλαδή πιο συγκεκριμένα μετά την C++ Borland 6 ποιες νεότερες εκδόσεις έχουν βγει???
Directx Δημοσ. 27 Σεπτεμβρίου 2008 Δημοσ. 27 Σεπτεμβρίου 2008 Η κατάσταση έχει έτσι: Καταρχήν έχουμε τον Borland C++ Builder 6, αυτός είναι η τελευταία έκδοση του C++ Builder από την Borland, πρόκειται για την πιο γνωστή και διαδεδομένη έκδοση του εργαλείου μέχρι σήμερα. Ύστερα έχουμε τον CodeGear C++ Builder 2006, αυτός είναι η επομένη έκδοση του Borland C++ Builder 6, κυκλοφορεί από την νέα εταιρία που δημιούργησε η Borland για τα εργαλεία προγραμματισμού της και ονομάζεται CodeGear. Ταυτόχρονα με τον CodeGear C++ Builder 2006, κυκλοφορούν και δυο ακόμα εκδόσεις η CodeGear Turbo C++ Explorer, που είναι δωρεάν και δεν έχει όλες τις δυνατότητες του C++ Builder 2006 και η CodeGear Turbo C++ Professional η όποια απευθύνεται σε επαγγελματιές προγραμματιστές που δεν μπορούν να αγοράσουν το πλήρες πακέτο CodeGear C++ Builder 2006. Πέρσι, η CodeGear κυκλοφόρησε μια νέα έκδοση του C++ Builder, την C++ Builder 2007 η οποία διόρθωνε δεκάδες bugs που είχε ο C++ Builder 2006 και η Turbo C++ Explorer & Professional. Φέτος η CodeGear πωλήθηκε τελικά στην εταιρία ανάπτυξης βάσεων δεδομένων Embarcadero Technologies (ή ET για συντομία) και κυκλοφορεί τον C++ Builder 2009 ο οποίος υποστηρίζει μεταξύ άλλων πλήρως το πρότυπο Unicode. Τα Turbo C++ Professional & Turbo C++ Explorer παραμένουν στην έκδοση 2006. Αυτή είναι σε γενικές γραμμές η ιστορία των ET/CodeGear C++ Builders μέχρι στιγμής – ανάλογη διαδρομή ακολούθησε και η ET/CodeGear Delphi. -----Προστέθηκε 27/9/2008 στις 02 : 05 : 14----- Αντί για TEdit μπορείς να χρησιμοποιήσεις TMaskEdit και να του πεις να δέχεται μόνο νούμερα χωρίς προγραμματισμό. Σωστός, απλά στην έκδοση μου (C++ Builder 6 & Turbo C++ Explorer) τα TEditMask δεν αντιδρούν πλήρως ως TEdit στην δι-επαφή τους με τον χρήση για αυτό και δεν τα προτιμώ, για παράδειγμα η διαγραφή ενός αριθμού με το πλήκτρο Delete είναι τοπική (per character) και όχι καθολική (per string). Πάντως είναι μια όμορφη & κομψή λύση .
Evgenios1 Δημοσ. 27 Σεπτεμβρίου 2008 Δημοσ. 27 Σεπτεμβρίου 2008 > AnsiString KeepDigit(AnsiString strInput) { // Return strInput digits (to use isdigit #include <locale>) for(int nCharIdx = 1; nCharIdx <= strInput.Length(); nCharIdx++) if(!isdigit(strInput[nCharIdx])) strInput.Delete(nCharIdx--, 1); return strInput; } Φιλε DirectX εγραψα μια μεθοδο(καταλαθος) η οποια δεχοταν ενα αντικειμνο και μια bool τιμη, αναλογους τη τιμη μου γυρνουσε το αντικειμενο με διαφορετικη ρυθμιση(αυτο ηθελα δλδ). >private void SetStatus(StatusBarItem item,bool State) { if(State){ item.Contact=(object)((string)item.Contact.Replace("Off","On")); item.foreground=Brushes.Lime; } else { item.Contact=(object)((string)item.Contact.Replace("On","Off")); item.foreground=Brushes.Red; } } Αποτι βλεπεις δεν εχει return αλλα μολης τη καλω μου κανει τοις αλαγες δλδ SetStatus(statusBarItemConnectState,true); μου αλαζει τη τιμη απο Off σε On Αυτο ισχει και με τη c++? (ειναι σε C#)
Directx Δημοσ. 27 Σεπτεμβρίου 2008 Δημοσ. 27 Σεπτεμβρίου 2008 Ναι αυτό γίνεται αν θέλουμε βέβαια και σε C++ ή C, είτε περνώντας την μεταβλητή (σε C++) by reference (την ορίζουμε με το σύμβολο & δίπλα της) είτε ως pointer (την ορίζουμε με το σύμβολο * δίπλα της) στην C. Αν απλά δώσουμε το όνομα της μεταβλητής δίχως & (C++) ή * (C/C++) τότε η ρουτίνα αποκτά μια κόπια της μεταβλητής και φυσικά οι τοπικές αλλαγές δεν περνούν στο αντικείμενο που περάσαμε στην μεταβλητή αλλά μόνο στην τοπική κόπια του (εντός της ρουτίνας). > void _SetBool(bool &bBool) { bBool = true; } Σε C το ίδιο γίνεται ως: > void _CSetBool(bool *ptrbBool) { *ptrbBool = true; }
Leite33 Δημοσ. 27 Σεπτεμβρίου 2008 Μέλος Δημοσ. 27 Σεπτεμβρίου 2008 Πω πω ζαλιστηκα με τις εκδοσεις τις C++ δηλαδη κάποιος που θέλει να ασχοληθει και επαγγελματικα κατεβάζει απευθειας τη 2009 εκδοση??? -----Προστέθηκε 27/9/2008 στις 04 : 20 : 17----- Πω πω ζαλιστηκα με τις εκδοσεις τις C++ δηλαδη κάποιος που θέλει να ασχοληθει και επαγγελματικα κατεβάζει απευθειας τη 2009 εκδοση??? -----Προστέθηκε 27/9/2008 στις 04 : 22 : 36----- Πω πω ζαλιστηκα με τις εκδοσεις τις C++ δηλαδη κάποιος που θέλει να ασχοληθει και επαγγελματικα κατεβάζει απευθειας τη 2009 εκδοση???
Directx Δημοσ. 27 Σεπτεμβρίου 2008 Δημοσ. 27 Σεπτεμβρίου 2008 Πω πω ζαλιστηκα με τις εκδοσεις τις C++ δηλαδη κάποιος που θέλει να ασχοληθει και επαγγελματικα κατεβάζει απευθειας τη 2009 εκδοση??? -----Προστέθηκε 27/9/2008 στις 04 : 20 : 17----- Πω πω ζαλιστηκα με τις εκδοσεις τις C++ δηλαδη κάποιος που θέλει να ασχοληθει και επαγγελματικα κατεβάζει απευθειας τη 2009 εκδοση??? -----Προστέθηκε 27/9/2008 στις 04 : 22 : 36----- Πω πω ζαλιστηκα με τις εκδοσεις τις C++ δηλαδη κάποιος που θέλει να ασχοληθει και επαγγελματικα κατεβάζει απευθειας τη 2009 εκδοση??? Όχι απαραίτητα, μπορεί άνετα να κάνει την δουλεία του και με τον 6 και με τον 2006 ακόμα και με την δωρεάν έκδοση Explorer, εκτός και αν έχει καημό το πλήρες Unicode οπότε η αγορά του 2009 είναι μονόδρομος.
Επισκέπτης Δημοσ. 28 Σεπτεμβρίου 2008 Δημοσ. 28 Σεπτεμβρίου 2008 κακή φάση το spam σε forum προγραμματισμού.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.