我想使用三元运算符和一个空字符"来正确拼写单词" neighbor ";(有或没有" ")。
我想做以下事情:
printf("There is %d neightbor%cn", nbNeighbors, (nbNeighbors>1)?'s':'');
显然,我得到了一个错误error: empty character constant
我如何使用这个技巧在一个printf
中获得正确的拼写?
您可以使用不可打印的字符,但它们可能最终看起来像其他字符。
你最好使用字符串:
printf("There %s %d neighbor%sn",
nbNeighbors != 1 ? "are" : "is",
nbNeighbors,
nbNeighbors != 1 ? "s" : ""
);
OP: "我想使用三元运算符…">
除非练习是练习三元运算符,否则致力于一种特定的技术会使人对可能性视而不见。
下面的示例使用"无分支"代码来提供语法正确的结果(忽略美式拼写" neighbors ")
printf( "There %s %d neighbor%sn",
"are is" + (nbNeighbors == 1)*4,
nbNeighbors,
"s" + (nbNeighbors == 1) );
我从不推荐操纵真值,但是操纵真值有时会派上用场。
编辑
以上内容对一些人来说可能很难阅读/理解。
下面是同样的东西,表达方式略有不同:
printf( "There %s %d neighbor%sn",
!(nbNeighbors-1)*4 + "are is",
nbNeighbors,
!(nbNeighbors-1) + "s" );
经过测试,功能齐全,无分支。