Callisto是全球某工商大学的大一新生,在学习c语言的过程中遇到了一道逆天题目:请问 "i = i++ + ++i * i++ - i + ++i;" 的结果是什么?
Callisto查阅资料后发现,这是一种未定义行为(undefined behavior),即C语言标准委员会不规定这样的代码应该如何处理,它可能是任何结果。在编译器发现这种代码时,即便它选择清空你的硬盘,也是符合c语言标准的。
具体而言,如果在为某个变量赋值时,右侧表达式试图修改这个变量本身,即构成了未定义行为。如 "i = i++; y = 3 + y++;" 都是未定义行为,而 "i = a + b;" "i = ++i;" 则不是。
注意左自增并不构成未定义行为。
现在期末考试卷上出现了 $n$道题目,每道题都是一条赋值语句,Callisto想请你写一个编译程序来判断这些语句是否包含未定义行为,如果包含,你需要输出 "Wrong Answer" ~~并格掉出题人的硬盘~~,否则输出 "Accept"。
题目保证:
第一行包含一个正整数$ n (1 \le n \le 100)$,表示语句个数;
接下来 $n$ 行,每行包含一个字符串 $s(6 \le |s| \le 1000)$,为待判断的语句。
对于每条语句,如果包含未定义行为则输出 "Wrong Answer",否则输出 "Accept"(不包含引号)。
4 i = i++; j = 1; x = 2 + c + ++x; m = 34 + k;
Wrong Answer Accept Accept Accept
如果用getchar()读取换行符有误,请尝试使用gets()函数读取换行符。