【问题标题】:changing printf to cout将 printf 更改为 cout
【发布时间】:2017-02-25 09:13:47
【问题描述】:

我对 C++ 还有些陌生,在使用 cout 方面需要一些帮助。

int main()
{
    char letterGrades[25] = { 'a', 'b', 'c', 'd', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', };

    for (int i = 0; i < 25; i++)
    {
        printf("[%d] --> %c", i, letterGrades[i]);

        if (i == 3)      // how can I print \n when i == 7 , 11 , 15 , 19....
        {
            printf("\n");
        }
    }
}

这就是我想要做的,而且效果很好。但是,我不知道如何使用 cout 编写此代码。

另外,我会以 4 in a row 表格格式打印结果。 所以结果看起来像这样

[0] --> A [1] --> A [2] --> A [3] --> A
[4] --> A [5] --> A [6] --> A [7] --> A
[8] --> A [9] --> A [10] --> A [11] --> A

【问题讨论】:

  • cout &lt;&lt; i &lt;&lt; " --&gt; " &lt;&lt; letterGrades[i];
  • 对于换行符,你可以:cout &lt;&lt; endl;,都假设你是using namespace std

标签: c++ printing cout


【解决方案1】:

cout 是其实例的类对于许多类型(包括 char、int 和 const char[](对于字符串文字))具有巧妙的对 &lt;&lt; 的重载:

所以你可以写

std::cout << "[" << i << "] --> " << letterGrades[i];

代替您的第一个 printf 和

std::cout << "\n";

第二个。您可以使用"\t" 将制表符注入流中。

所有这些都会对性能造成轻微影响,这应该可以忽略不计。您平台上的 I/O。

另外,请考虑阅读C++: "std::endl" vs "\n" 以进行进一步研究。

最后,使用

if (i % 4 == 3){
    // i is 3, 7, 11, 15, 19, etc
}

用于定期换行的条件检查。 % 是 余数 运算符。

【讨论】:

【解决方案2】:

其实很简单

for (int i = 0; i < 25; i++)
{
 cout << "[" << i << "] --> " << letterGrades[i] << (i%3==0)?endl:""; 
}

让我解释一下代码

  1. cout 采用按位运算来传递流。这基本上意味着 你需要使用“

  2. 最后一位(i%3==0)?endl:""。如果您不熟悉? 运算符,那么它的作用是如果() 中出现的条件为真,它将评估: 之前的部分,否则它将评估后面的

例如:-

print((1>0)?"Hello":"World") \\ Output: Hello
print((false)?"Hello":"World") \\ Output: World
  1. % 也是我们可以使用的简洁运算符。它将一个数字相除并返回余数。

例如:-

print(10%5) \\ Output: 0
print(5%2) \\ Output: 1

所以我用它来查看第三列之后是否应该有一个行终止符endl ("\n"),

希望对你有帮助

【讨论】:

  • 删除第一句话,我会投票。在电影《星际穿越》上映时,GCI 的家伙们使用广义相对论方程来模拟虫洞图形,他们发现这很容易。
【解决方案3】:

在第 3、7、11 等行之后插入换行符(或 std::endl)的最简单方法可能是有一个 int 来计算每一步

int endl_count = 1;
for (int i = 0; i < 25; i++)
  {
    std::cout << '[' << i << ']' << " --> " << letterGrades[i];
    if (endl_count == 3) {
      endl_count = 0;
      std::cout << std::endl;
    }
    endl_count++;
  }

另外:要获取数组的大小,您可以这样做

(sizeof(array) / sizeof(datatype))

所以你可以这样做

for (int i = 0; i < (sizeof(letterGrades) / sizeof(char)); i++)

而不是硬编码25

【讨论】:

    【解决方案4】:

    在for循环里面是这样的:

    std::cout << "[" << i << "]" << "-->" << letterGrades[i]; 
    if (i == 3){ 
         std::cout << "\n"; 
    }
    

    【讨论】:

    • 这不会在每 3 列之后留下换行符
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2017-06-02
    • 2020-08-12
    相关资源
    最近更新 更多