我正在尝试打印一个看起来像这样的二维数组
*************
*
*
*************
像一个框架,但我很难,因为它不打印星星而不是打印数字,甚至我用42('*')指定的那些列也没有显示。我不知道问题是否是我打印阵列的方式。我希望有一个人可以帮助我。谢谢!
这是我的代码:int i,j;
int star=42;
char starchar=(char)star;
//colMax=10;
int frame[rowMax][colMax];
for(row=0;row<rowMax;row++)
{
for(column=0;column<colMax;column++)
{
frame[0][column]=starchar;
frame[9][column]=starchar;
frame[row][9]=starchar;
printf("%d%d",row,column);
}
答案 0 :(得分:1)
打印数字是因为您将%d%d传递给printf函数,后者代表十进制数。用%c替换%d以获取字符表示。请参阅printf手册,例如在http://www.cplusplus.com/reference/cstdio/printf/
此外,您还有另一个问题,即除了打算使用printf之外的其他值。您正在传递行和列,它们不是该位置的值,而是索引的数字。你想要这样的东西:
的printf(&#34;%C&#34;,帧[行] [列]);
正如Paul Roub在评论中指出的那样,你在显示循环期间将值放入数组的方式也做了一些奇怪的事情,如果你进一步开发这个代码,这可能会让你感到困惑。首先,您没有指定数组中非星形部分的内容。那些应该被设置为类似空格字符之前或同时添加星星。如上所述,值将默认为零,这在ASCII中是不可打印的null,而不是空格(即32)。
另外,我假设你的意思是首先设置值,然后显示它们。循环的工作方式,它是在绘制它们时设置值,以一种有趣的方式,我认为这不是你想要的。您的示例目前最终会显示您的期望,但通常我希望您先填写值,然后再显示它们。
答案 1 :(得分:0)
printf("%d%d",row,column);
打印row
和column
,而不是frame[row][column]
中的值。
#include <string.h>
#include <stdio.h>
int main(void) {
// Not clear if rowMax is the maximum index or the width. Assume maximum index.
size_t rowMax = 10;
size_t colMax = 5;
int star = '*';
// Much easier to use char array
char frame[rowMax + 1][colMax + 1]; // +1 the dimensions
// fill
memset(&frame[0], star, colMax + 1); // fill first row
for (size_t row = 1; row < rowMax; row++) {
memset(&frame[row], ' ', colMax); // fill with spaces
frame[row][colMax] = star;
}
memset(&frame[rowMax], star, colMax + 1); // fill last row
// print
for (size_t row = 0; row <= rowMax; row++) {
for (size_t col = 0; col <= colMax; col++) {
fputc(frame[row][col], stdout);
}
fputc('\n', stdout);
}
return 0;
}