找到负责打印二维数组的代码。
for (int i = 0; i < n; i++)
for (int j = 0; j < n || !putchar('\n'); j++)
printf_s("%4d", A[i][j]); 导致在每一行末尾打印转义序列的布尔表达式是如何工作的?
发布于 2019-12-10 07:13:20
这里有两件事在起作用:
当j < n为真时,由于短路语义,||的右侧将不会被评估。当j < n为false时,!putchar('\n')将被计算,它将打印换行符并返回一个"true“值( '\n'或EOF在错误的情况下),该值由于!变为false,因此整个条件变为false,循环结束。
它是一个模糊的变体
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf_s("%4d", A[i][j]);
}
putchar('\n');
}我建议您不要像问题中所示的那样使用(或者更糟的是编写)代码。混淆不是什么值得骄傲的事情(除非你正在加入IOCCC)。
发布于 2019-12-10 07:09:39
因为有了||,putchar函数只有在j < n为false时才会调用。现在,j < n在每一行的末尾都是假的。这就是为什么在每一行末尾都会得到\n的原因。
https://stackoverflow.com/questions/59261891
复制相似问题