#include<stdio.h> int main() { int a=1; printf("%d%d%d",a++,++a,a); return 0; } | Sololearn: Learn to code for FREE!
New course! Every coder should learn Generative AI!
Try a free lesson
0

#include<stdio.h> int main() { int a=1; printf("%d%d%d",a++,++a,a); return 0; }

output should be :221 but it is coming 233 how ??

9th Jul 2017, 10:12 AM
RAHUL
14 Answers
+ 6
@Sreejith This question should not appear in any exam. If it does, you can write any answer and appeal if you are marked wrong for that specific question.
10th Jul 2017, 4:58 AM
Hatsy Rei
Hatsy Rei - avatar
+ 5
The operation does not go blindly from left to right. ++a is evaluated prior to statement execution, a becomes 2. Printing a++ will return 2, and then a gets incremented to 3. Note: prefix and postfix operators increment the value of a variable and store it back to the variable. The value is not incremented just for that instance.
9th Jul 2017, 10:23 AM
Hatsy Rei
Hatsy Rei - avatar
+ 5
@Sreejith Did you even compile the code. Your statements would be correct if the code was separated on single lines: int a = 1; cout << a++; cout << ++a; cout << a; will return 133, but not for our case here in original post. In fact, the behaviour of multiple prefix/postfix operators on a single continuous line of output code (either through cout or printf) is undefined and is up to the compiler. http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.15
9th Jul 2017, 12:14 PM
Hatsy Rei
Hatsy Rei - avatar
+ 5
@Seeejith I compiled the code as it is both on Code Playground and desktop compiler. It returned 233 in both environments. The site I tried to link to may have been down for some time now. This is the original source: https://stackoverflow.com/questions/5204805/explanation-of-call-ordering-in-a-cout-statement-postfix-vs-prefix Also: https://stackoverflow.com/questions/18174498/how-is-the-postfix-and-prefix-increment-operator-evaluated-in-an-expression This isn't just about 'the concept of postfix'.
9th Jul 2017, 1:34 PM
Hatsy Rei
Hatsy Rei - avatar
+ 5
@Sreejith I don't know. :D We can deduce the logic behind the compiler's decisions, but cannot predict the decision of a compiler. Hence, all our answers are correct for each of our own specific compiler.
9th Jul 2017, 4:11 PM
Hatsy Rei
Hatsy Rei - avatar
+ 3
Sreejith, this is called "undefined behaviour" and is compiler dependent. https://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points
9th Jul 2017, 4:20 PM
Karl T.
Karl T. - avatar
+ 3
@hatsy @karl T. So if this question appears in any exam which answer should be given
9th Jul 2017, 6:09 PM
‎ ‏‏‎Anonymous Guy
+ 2
because a++ is increments value of a after ++a is increments value of a before a is the new value printed a=1 at start of the program then a++ increments it's value by 1 so now it's 2 then again it is Pre increment ++a so now it's value is 3 then a will be printed it's present value is 3 so output is 233
9th Jul 2017, 10:25 AM
Jay Chheda
Jay Chheda - avatar
+ 2
I'm surprised the preprocessor does not even complain about the lack of space between #include and <stdio.h>
9th Jul 2017, 2:48 PM
Karl T.
Karl T. - avatar
+ 2
@hatsy I compiled it on 2 apps both gave me 133 but playground gave me 233 So according to the post you mentioned 133, 231, 221, 233 are all legal answers on different compilers based on their settings and priority now what is the correct answer to this question ?? or is there any one correct standard answer to this question??
9th Jul 2017, 2:57 PM
‎ ‏‏‎Anonymous Guy
+ 1
both of your answers are wrong it is 133 not 233 or 221 because a++ is post increment ,so value of a will be incremented next time you use the value.so it displays "1". ++a is pre increment, its value will be increased and displayed.so its displays "3". (2 from previous increment) finally a, after all the increments, the value of a has changed to "3".
9th Jul 2017, 11:33 AM
‎ ‏‏‎Anonymous Guy
0
@hatsy did you compile it?? I dont think you understand the concept of post fix and your reference site not working
9th Jul 2017, 12:25 PM
‎ ‏‏‎Anonymous Guy
0
answer can be very depends upon the compiler due to unspecified behaviour
10th Jul 2017, 4:49 AM
RAHUL
- 6
@hatsy Rei operation will go from right to left
9th Jul 2017, 11:14 AM
RAHUL