网上看到的题解但不太懂,求大佬讲解下原理

P5705 【深基2.例7】数字反转

Mrgteo79c @ 2023-03-11 22:48:22

#include <stdio.h>
int main()
{
    printf("%c%c%c%c%c",getchar(), getchar(), getchar(), getchar(), getchar());
    return 0;
}

by RP_INT_MAX @ 2023-03-11 23:02:25

同问,什么奇技淫巧。


by Yujinhe469 @ 2023-03-11 23:12:57

其思路和栈有共通之处:

系统遍历到前面的 getchar 时不会读入,直到最后一个 getchar 时开始读入,此时从后向前遍历并读入,于是后面的 getchar 读入了前面的字符,具体可以参考后面这份代码

#include <stdio.h>
char awa;
int main()
{
    printf("%c%c%c%c%c",getchar(), awa=getchar(), getchar(), getchar(), getchar());
    printf("\n%c",awa);
    return 0;
}

by ud2_ @ 2023-03-11 23:14:39

原理是运气好,编译器从可能的 120 种执行顺序中挑选了能过这题的一种。

换个编译器就过不了了。


by Yujinhe469 @ 2023-03-11 23:21:35

@ud2_ 不是吧 在我的本地IDE也能过的


by Yujinhe469 @ 2023-03-11 23:22:02

@ud2_ 可能是不同 IDE 的细微差别


|