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

Ερώτηση c++


nodreams.ct

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

Δημοσ.

παιδιά σήμερα έγραφα c++ και έβαλε ένα ερώτημα.. έχουμε τον παρακάτω κώδικα και να πειτε τι κανει το while...

 

>
....
char str[]="geia!"; 
char* a=str;
char* b;
....
b=(char*)malloc(sizeof(str)); 
....
while( *b++ = *a++ );
.....

 

μολις το ειδα τα έχασα, 7 σύμβολα και 2 γράμματα μόνο! ασε που έχει και "=" μέσα.. <img src="http://www.insomnia.gr/ubbthreads/images/graemlins/tongue.gif" alt="" />

 

Έγραψα πως αντιγράφει τους 2 πινακες και το εξήγησα (ελπίζω).. αλλά θελω και μια δεύτερη γνώμη, καμιά ιδέα;

 

Ευχαριστώ

Δημοσ.

Από όσο θυμάμαι από C++ το ερωτηματικό στο τέλος του while βρόχου σημαίνει ότι ο βρόχος θα εκτελετεί μόνο μία φορά. ʼρα δε θα μεταβιβάσει όλο το περιεχόμενο.

 

Δεύτερον, η μεταβλητή c που δηλώνεται; Δε την βλέπω κάπου στο πρόγραμμα. Θα έπρεπε λογικά να σου βγάλει μήνυμα σφάλματος.

Δημοσ.
tasoss

said:

episis nomizo pos eprepe na exi == k oxi =

 

Θα μπορούσε να είναι και == αλλά το = σε while βρόχο σημαίνει εκχώρηση τιμών σε κάτι άλλο και όχι σύγκριση. Πιστεύω ότι αν η μεταβλητή c αλλάξει τότε εκχωρεί την πρώτη τιμή και μετά φεύγει από το while.

Δημοσ.

prwta apo ola to parapanw oute kan kanei compile. Ama exw madepsei swsta auto pou thes na grapseis, prepei stin deuteri seira na baleis:

char str[]="geia!"; (i C++ den einai Java, e apoc?)

kai stin teleutaia

while( *b++ = *a++ );

 

padws einai poli tricky erwtisi kai kali. Gia na tin apadiseis prepei na exeis sto mualo sou oti o telestis ++ exei proteraiotita enadi tou * opote to statement tou while einai san to parakatw:

 

while( *(b++) = *(a++) );

 

opote kathe fora: tin timi tis epomenis thesis mnimis tou b, tin kanei isi me tin timi tis epomenis thesis mnimis tou a mexri na brei null opote kai to while termatizei afou i anathesi bgazei null apotelesma.

 

Opote auto pou kanei, einai na gemizei tin ARXIKES theseis mnimis tou b me tin timi tou a ("geia") alla, metakinei kiolas tous a kai b pointers opote meta deixnoun amesws meta auta ta "geia", diladi se asxetes theseis mnimis.

 

Δημοσ.

ʼντε μιχάλη που είσαι!

 

Έχεις δίκιο ήθελα να γράψω: (βιασύνη!)

 

char str[]="geia!";

while( *b++ = *a++ );

 

Εγώ έγραψα πως αντιγράφει τους πίνακες διότι αρχικά κάνει *b = *a (αφού τα o τελεστής a++,b++ επιστρέφει την τιμή a,b αντίστοιχα).μετα ξανακάνει έλεγχο το while (τωρα είναι a=a+1,b=b+1) συνεχίζει να αντγραφει στοιχεία του πίνακα ώσπου να φτάσει στον τελευταίο στοιχείο που θα ειναι 0 (πάντα το τελευταίο ειναι 0 στα strings) οπότε και θα βγεί απο το while.. σωστό;

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

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

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