首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“for (int j= 0;j<n x=!putchar(‘\n’;j++)”是如何工作的?

“for (int j= 0;j<n x=!putchar(‘\n’;j++)”是如何工作的?
EN

Stack Overflow用户
提问于 2019-12-10 07:05:12
回答 2查看 208关注 0票数 1

找到负责打印二维数组的代码。

代码语言:javascript
复制
for (int i = 0; i < n; i++)
 for (int j = 0; j < n || !putchar('\n'); j++)
  printf_s("%4d", A[i][j]); 

导致在每一行末尾打印转义序列的布尔表达式是如何工作的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-10 07:13:20

这里有两件事在起作用:

  1. 逻辑和OR运算符的短路评估语义
  2. !putchar('\n')将始终为"false“(putchar返回所写字符或EOF,在本例中两者均为非零,因此为"true")。

j < n为真时,由于短路语义,||的右侧将不会被评估。当j < n为false时,!putchar('\n')将被计算,它将打印换行符并返回一个"true“值( '\n'EOF在错误的情况下),该值由于!变为false,因此整个条件变为false,循环结束。

它是一个模糊的变体

代码语言:javascript
复制
for (int i = 0; i < n; i++)
{
    for (int j = 0; j < n; j++)
    {
        printf_s("%4d", A[i][j]); 
    }
    putchar('\n');
}

我建议您不要像问题中所示的那样使用(或者更糟的是编写)代码。混淆不是什么值得骄傲的事情(除非你正在加入IOCCC)。

票数 5
EN

Stack Overflow用户

发布于 2019-12-10 07:09:39

因为有了||putchar函数只有在j < n为false时才会调用。现在,j < n在每一行的末尾都是假的。这就是为什么在每一行末尾都会得到\n的原因。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59261891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档