Δημοσιεύτηκε: 02 Σεπ 2011, 20:19
από migf1
Στο 2ο test-case ( s1[]="a", s2[]="b"; ) ΔΕΝ μπαίνει καν στο if !!!!!!!!!!!!

Έχουμε...
Κώδικας: Επιλογή όλων

...
while ( *s1 == *s2++)
if ( *s1++ == '\0')
return;
return (int) (*s1 - *--s2 );

Ξεκινάμε λοιπόν με *s1: a και *s2: b

α) Η συνθήκη του while-loop είναι απευθείας FALSE διότι: a != b άρα δεν πάει καν στο if, απλά αυξάνει το s2 (οπότε έχουμε *s2: \0) και πάει στη γραμμή της αφαίρεσης.
β) Εκεί λοιπόν έχουμε *s1: a και *s2: \0 και πριν ξεκινήσει η αφαίρεση ο s2 μετακινείται λόγω του -- μια θέση πίσω, άρα *s2: b ... οπότε η αφαίρεση που εκτελείται τελικά κι επιστρέφεται ως αποτέλεσμα είναι η: a - b