i=i>99?99:i--;这样写有问题吗?
时间: 2024-03-20 10:45:18 浏览: 18
这句代码本身没有语法错误,但是可能会导致逻辑错误。
在这个语句中,如果 i 大于 99,则将 i 设为 99,否则将 i 减 1。但是,由于 C 语言中赋值运算符的优先级低于递减运算符,所以 i-- 的操作会先执行,然后才会执行赋值操作。因此,当 i 的初始值为 100 时,这句代码将会将 i 自减 1,然后将 i 设为 99,最终 i 的值为 98,而不是预期的 99。
为了避免这种问题,可以使用括号来明确运算顺序,如下所示:
```
i = (i > 99) ? 99 : (i - 1);
```
这样就可以保证先执行 i - 1 的操作,然后再根据结果来决定是否将 i 设为 99。
相关问题
i>99?i=99:i--;与 i=i>99?99:i-1;这两句代码正确吗
这两句代码都是正确的,但是它们的含义是不同的。
第一句代码 `i>99?i=99:i--;` 的意思是,如果 i 大于 99,则把 i 设为 99,否则将 i 自减 1。这句代码使用了条件运算符 ?:,它的含义是“如果条件为真,则返回第一个表达式的值,否则返回第二个表达式的值”。
第二句代码 `i=i>99?99:i-1;` 的意思是,如果 i 大于 99,则把 i 设为 99,否则将 i 减 1。这句代码也使用了条件运算符 ?:,它的含义与第一句代码相同,只是表达方式略有不同。
请注意,这两句代码对于 i 的初始值不同,它们的执行结果也可能不同。例如,当 i 的初始值为 100 时,第一句代码将会将 i 自减 1,而第二句代码将会把 i 设为 99。
C语言中,i初始值 100,i>99?i=99:i--;与 i=i>99?99:i-1;分别结果是什么
在这个例子中,初始值为 100,执行第一句代码 `i>99?i=99:i--;` 时,由于 i 大于 99,所以将 i 设为 99,因此最终 i 的值为 99。
执行第二句代码 `i=i>99?99:i-1;` 时,由于 i 大于 99,所以将 i 设为 99,因此最终 i 的值为 99。
因此,这两句代码在这个例子中的执行结果是相同的,都将 i 的值设为了 99。