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

Σοβαρό error στην C++ ? Μορεί...


sofiemer

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

Δημοσ.

Καλημέρα σας,

 

έχω τον παρακάτω κώδικα:

 

AnsiString a,b,c;

 

cin >> a.c_str();

cout << endl;

cin >> b.c_str();

cout << endl;

cin >> c.c_str();

cout << endl;

 

cout << a.c_str();

cout<< b.c_str();

cout<<c.c_str();

 

δεν κάνει τίποτα άλλο από το να τυπώνει τρια string που έχω εισάγει εγώ.

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

 

sofia

royla

tina

 

θα τυπώσει τρεις φορές το tina...

 

Ξέρει κανείς γιατί?

Είναι όντως βαρύ λάθος ή κανω κάτι εγώ στραβά?

 

Ευχαριστώ:???: ....

Δημοσ.

Δοκίμασε να κάνεις cout το string που θες αμέσως μετά το cin αντί για 3 cin συνεχομένα και 3 cout συνεχόμενα.

Δημοσ.

Έτσι όπως έχεις γράψει τον κώδικα, αντί να διαβάζεις το cin και να αποθηκεύεις την τιμή του στις κλάσεις AnsiString, καλείς την c_str() και αποθηκεύεις την τιμή που διαβάζεις από την c_in στον πίνακα που σου επιστρέφει η c_str. Μάλλον δεν είναι αυτό που θες!

 

Η AnsiString δεν είναι κλάση της STL οπότε δεν ξέρω πως συμπεριφέρεται, αλλά αν δουλεύει όπως η basic_string, η c_str σου επιστρέφει ένα pointer στο array που περιέχει η AnsiString. Για κάποιο λόγο, τα τρία AnsiStrings a, b, c βρέθηκαν να επιστρέφουν ένα pointer στον ίδιο πίνακα. Και τα τρία AnsiStrings όμως έχουν στην αρχή την ίδια τιμή. Χωρίς τον κώδικα της c_str είναι δύσκολο να μαντέψει κανείς τί συμβαίνει, αλλά υποψιάζομαι ότι λόγω κάποιου optimization του compiler AnsiStrings χωρίς τιμή μοιράζονται το ίδιο array.

 

Η basic_string έχει operator>>, οπότε μπορείς να γράψεις cin >> a; Υποθέτω το ίδιο μπορείς να κάνεις και με την AnsiString

Δημοσ.

Λοιπόν, δοκίμασα να τρέξω τον κώδικα σου με basic_string αντί για AnsiString και δεν κάνει compile, γιατί στο basic_string η c_str επιστρέφει const char*. Ο operator>> δεν έχει οριστεί για const τύπους (αυτό έλειπε) οπότε το compile αποτυγχάνει. Υποψιάζομαι ότι η AnsiString επιστρέφει char* με αποτέλεσμα ο κώδικας να κάνει compile και να οδηγεί στο περίεργο αποτέλεσμα που είχες.

Δημοσ.

Καλησπέρα,

 

Δοκίμασα να κάνω αυτό που ειπώθηκε παραπάνω, δηλαδή να τυπώσω το string αμέσως μετά την εισαγωγή τους στην μεταβλητή, και μπορώ να πώ ότι δούλεψε κανονικά...

 

Ας πούμε όμως ότι δεν θελω να το κάνω έτσι αλλά όπως αρχικά το παρέθεσα.. Τελικά μάλλον θα αλλάξω το τύπο και τελείωσα...

 

Ευχαριστώ για τις απαντήσεις..:-D

Δημοσ.

Γεια σας,

Είμαι καινουργια εδω...Μια και δεν ξερω που να απευθυνθω προκειμενου να λυσω το παρακατω πρόβλημα που εχω το παραθέτω εδώ: Εχω ενα μικρό πρόβλημα οσον αφορά τη γλώσσα c++.Εχω ενα λαβυρινθο(τετραγωνικο πινακα) ο οποιος ειναι γεματος με '*' (=εμποδιο) και '.' (=διαδρομος).Πως ειναι δυνατον να κανω το πρόγραμμα να τρεξει αυτον τον πινακα κατα μηκος και κατα πλατος μονο χωρις να τον τρεξει διαγώνια?(καθε φορα που συνανταει εμποδιο πρεπει να αλλαζει κατευθυνση=να κανει δλδ ολες τις πιθανες διαδρομες προκειμενου να βρει καποιο μονοπατι εξοδου).

Αν καποιος γνωριζει οτιδηποτε πανω σε αυτο το θεμα θα το εκτιμουσα πολυ αν με βοηθουσε.

Ευχαρισω

Δημοσ.

Kat arxas kalutera na arxiseis new topic me ti sugkekrimeni erwtisi. 8a pas sto Forum programmatismos kai 8a patiseis new topic.

Oso gia auto pou rwtas, uparxoun alles sun8ikes, px apo ka8e simeio prepei na perna mono mia fora, 'i tipote allo? Poio einai to problima? An fantastw ton pinaka san ena grafima me kombous ta kelia pou exoun diadromo kai ferw akmes anamesa stous kombous pou einai ston pinaka geitones (ka8etoi 'i orizontioi) tote me kapoio algori8mo diasxusis tou grafimatos eisai OK

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...