Why the output of the following code is 323 ? | Sololearn: Learn to code for FREE!
New course! Every coder should learn Generative AI!
Try a free lesson
+ 2

Why the output of the following code is 323 ?

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

12th Apr 2018, 8:53 PM
cool_boy12344
cool_boy12344 - avatar
2 Answers
0
It's very interesting. I found that compiler evalueate printf's arguments in non-specified order. It is optimization thing. "What is specified by the standard, is that modifying the same variable twice in one operation is undefined behavior; ISO C++03, 5[expr]/4:"
12th Apr 2018, 9:07 PM
Bartosz Pieszko
Bartosz Pieszko - avatar
0
hi there, the answer depends on your compiler. in printf statement, order in which value of arguments is determined is right to left. remaining specific to this example, first ++i is evaluated which makes the value of i as 2. remember that only ++i has been evaluated value of the 3rd argument has not been decided yet. Next i++ is executed, which makes the value of as 3. now value of arguments is determined. for preincrement current value of i is chosen, hence third argument value will be 3. for post increment operators that value will be one before executing the postincrement operator, which was 2. for normal variables current value is chosen that is 3, hence first argument will be 3. analogous to this printf("%d%d%d%d",i,i++,i++,++i); will print 4324 fourth argument value 4 - current value third argument value 2 - since before evaluating it value of i was 2 second argument value 3- since before evaluating it value of i was 3 first argument value 4- current value of i.
12th Apr 2018, 9:17 PM
Prajyot Naik
Prajyot Naik - avatar