为什么我总是得到字符'?'当在int和char之间转换时?

问题描述:

我使用Microsoft Visual C#:为什么我总是得到字符'?'当在int和char之间转换时?

Console.Write((char)((int)sentence[i] + random.Next(2) == 0 ? 1 : -1)); 

我想Console.Write炭我有一句话当前指数[I],但随机要么得到它的上面或下面的字符。然而,我总是得到char'?'。 为什么?

+0

你错过了括号。你的代码正在执行'if sentence [i] + rnd == 0'而不是'sentence [i] + if(rnd){} ...'。改变代码为:'Console.Write((char)((int)sentence [i] +(random.Next(2)== 0?1:-1)));' – Rob

+0

哦,当然!谢谢你,这让人感觉很有意思。 – PlayCreatively

您正遇到操作顺序问题。尝试添加括号:

Console.Write((char)((int)sentence[i] + (random.Next(2) == 0 ? 1 : -1))); 

没有括号,它是做:

(句子[I] + random.Next(2))== 0? 1:-1

...您可以看到总是以1或-1结果。给定ASCII字符范围,几乎肯定总是导致-1,这显然不是可打印的字符,因此输出为?

+0

感谢您的详细。当他们有逻辑推理时,它帮助我记住失败。 – PlayCreatively