对于我创建的代码,我输出了与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。
答案 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++;
}
}
}