我有一个人为的例子来演示对特定功能的请求 - 我想知道是否有人有一个聪明的技巧来做到这一点。
以下是一个经常遇到的问题:
“打印一系列数字;在它们之间打印一个空格,并在末尾打印一个回车符(但没有空格)。
显而易见的解决方案是使最后一个(或第一个)语句成为特殊情况。我正在考虑如何使其更加高效/紧凑。
蛮力:
for(ii=0; ii<4; ii++) {
printf("%d", ii);
if(ii<3) printf(" "); else printf("\n");
}
请注意,这涉及到two对某个条件的评价。
展开:
for(ii=0; ii<3; ii++) {
printf("%d ", ii):
}
printf("%d\n", ii);
利用这样一个事实ii
当我们离开循环时,将最后一次递增。
我想要的功能
ii = 0;
while(1) {
printf("%d", ii);
ii++;
if(ii<3) printf(" ");
else {printf("\n"); break;}
}
我想知道是否有可能在内部进行这项工作for
陈述。我稍微修改了一下,发现以下内容有效(有点令我惊讶......它确实需要括号,并且在?:
和,
运算符 - 请参阅http://codepad.org/wFa2YwCg):
for(ii=0; (ii<3)?(printf("%d ",ii),1):(printf("%d\n",ii),0);ii++);
我本质上是在转动evaluate this condition
for 循环的一部分变成execute this statement for most of the loop, and this other one for the last pass
陈述。
我想知道是否有更好的方法来做到这一点 - 既高效又可读?