如何打印每行x个结果量

时间:2011-09-22 02:43:01

标签: c++ for-loop

对于我创建的代码,我输出了与int s对应的ASCII字符,我需要每行打印16个ASCII码。我该怎么做呢?我不确定如何处理这些?我是否在里面创建了另一个for循环?

int main()
{
    int x = 0;

    for (int i = 0; i <= 127; i++)
    {
        int x = i;
        char y = (char) x;
        cout << y;
    }

    return 0;
}

或者我应该将cout放在外面16个单独的行?我试图从1连续打印17个ASCII。

5 个答案:

答案 0 :(得分:1)

使用另一个与i一起计数的变量。当它达到16时,重置它并打印一个新行。重复直到循环终止。

即(我可能在这里一个人,我没有想太深

for (int i=0, j=1; i<=127; i++,j++)
{
    int x = i;
    char y = (char) x;
    cout << y;

    if (j == 16) {
        j = 0;
        cout << '\n';
    }
}

或者,您可以查看if (i % 16 == 0)

答案 1 :(得分:1)

是的,你需要第一个循环。(我误解了所要求的内容。)

您还需要清理代码。第一个x未使用;因为你可以很好地使用x(并且演员是可选的),所以不需要第二个char y = (char)i;。您通常应使用for (int i = 0; i < 128; i++)条件而不是<的循环<=

您还需要在某处生成换行符(cout << endl;cout << '\n';)。您是否需要处理控制字符,例如'\n''\f'

最后,我不确定'asciis'是我以前见过的术语;正常的术语是'ASCII字符'。

答案 2 :(得分:1)

怎么样:

#include <iostream>

int main()
{
    for(int i = 0, j = 0; i < 128; ++i, ++j)
    {
        if(j == 16)
        {
            j = 0;
            std::cout << std::endl;
        }

        std::cout << static_cast<char>(i);
    }

    return 0;
}

每次迭代j增加1;在16次迭代后,j重置为0,并打印换行符。


或者,正如@Sujoy指出的那样,你可以使用:

if((i % 16) == 0)
    std::cout << std::endl;

但这引入了在输出开头打印额外换行符的问题。

答案 3 :(得分:1)

您不需要其他变量来跟踪它。 i已经是一个int。

所以if i modulo 16 equals 0 then print a newline 否则打印(char)i

编辑:

注意,使用像i这样的变量对于简单的迭代来说是可以的,但总是很好的做法来更好地命名它们。 因此,请考虑如何将程序中的i更改为ascii,从而提高可读性。它立即让你更清楚你在这里尝试做什么。

答案 4 :(得分:1)

int main()
{
 int charsThisLine =0;
 for (int currentChar=0; currentChar<128; currentChar++)
 {
  if(charsThisLine==16)
  {
   cout<<endl;
   charsThisLine = 0;
  }
  else
  {
   cout<<(char)currentChar;
   charsThisLine++;
  }
 }
}