首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >cout <<“\n"[i == n- 1];是如何工作的?

cout <<“\n"[i == n- 1];是如何工作的?
EN

Stack Overflow用户
提问于 2021-04-20 02:36:14
回答 2查看 468关注 0票数 2

我不知道[i == n-1]在这个场景中是如何工作的

代码语言:javascript
运行
复制
for (int i = 0; i < n; i++) {
    cout << a[i] << " \n"[i == n - 1];
}
EN

回答 2

Stack Overflow用户

发布于 2021-04-20 02:41:26

Expression i == n-1是一个布尔表达式,计算结果为1 (True)或0 (False)。

" \n"是由3个字符值组成的数组:

  • Space (0x32)

  • \n (0x0D)

  • NULL (0x00)

因此,完整的表达式将计算为Space\n,这取决于i是否是数组a的最后一个索引。

带有cout的完整的for循环将打印空格,直到i位于数组的末尾,然后在最后一个元素之后打印一个\n

这是聪明的,但令人困惑。我会告诉程序员去找一个更好的方法。

我可能更喜欢使用三元运算符(? :)

代码语言:javascript
运行
复制
for (int i = 0; i < n; i++) {
        cout << a[i] << (i == n - 1) ? "\n" : " ";
  }
票数 3
EN

Stack Overflow用户

发布于 2021-04-20 02:41:12

字符串文字" \n"的类型为const char[3] (一个用于0结束符),您可以像往常一样访问该数组的元素:

代码语言:javascript
运行
复制
assert(" \n"[0] == ' ');
assert(" \n"[1] == '\n');

“索引”i == n-1对于除最后一次迭代之外的所有迭代都是true,它将转换为1 (而false将转换为0)。因此,同样的代码可以写得更具可读性:

代码语言:javascript
运行
复制
for (int i = 0; i < n; i++) {
    if ( i == n-1) {
        cout << a[i] << '\n';
    } else {
        cout << a[i] << ' ';
    } 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67167559

复制
相关文章

相似问题

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