将printf改为cout

时间:2017-02-25 09:13:48

标签: c++ printing cout

我对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个连续的表格格式打印结果。 所以结果看起来像这样

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

4 个答案:

答案 0 :(得分:4)

cout是一个实例的类对<<有许多类型的聪明重载,包括charintconst char[](对于字符串)文本):

所以你可以写

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
}

对条件检查定期换行。 %余数运算符。

答案 1 :(得分:0)

在for循环中这样的东西:

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

答案 2 :(得分:0)

实际上很容易

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

让我解释一下代码

  1. cout采用按位操作传入流。这基本上意味着什么 你需要使用“&lt;&lt;”操作员告诉它要打印什么。

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

  3. 例如: -

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

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

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

      希望这有帮助

答案 3 :(得分:0)

在每个第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

进行硬编码