我是C的新手,我只是想打印出一个两个2阵列。 这个错误让我整天烦恼,我不确定最新情况。
#include<stdio.h>
void run(int);
main()
{
run(5);
return 0;
}
//Have to make it a character array as it needs to
//store numbers AND commas.
run(int x)
{
int size = 2*x -1;
char array[size][size];
int i = 0;
int j = 0;
for( i; i < size; i++){
for(j; j< size; j++){
array[i][j] = '1';
}
}
int k = 0;
int l = 0;
for( k; k < size; k++){
for(l; l< size; l++){
printf( "%c" , array[l][k]);
}
printf("%\n", "");
}
}
这是我得到的输出:
1%
%
%
%
%
%
%
%
%
答案 0 :(得分:2)
你的代码有几个错误:
最大的问题是你没有初始化循环计数器应该在哪里:
var loadboundaries = L.geoJson(worldboundaries, {onEachFeature: onEachFeature});
map.on('load', loadboundaries.addTo(map).setStyle(function (feature) {
return {
fillColor: getColor(feature.properties.density),
weight: 2,
opacity: 1,
color: 'white',
dashArray: '3',
fillOpacity: 0.7
};
}));
有了这个,for(i; i < size; i++){
for(j; j < size; j++){
&amp;在i
语句之前保留j
。这些陈述的第一部分什么都不做。虽然这对for
无害(因为它在i
之前被初始化为0),但这对于for
来说是毁灭性的,它永远不会回到0.你的代码应该是:
j
for(i = 0; i < size; i++){
for(j = 0; j < size; j++){
&amp;存在同样的问题。 k
,应该应用相同的修补程序:
l
接下来,您在阵列中“旋转”访问。当您使用值填充数组时,外部循环中为for(k = 0; k < size; k++){
for(l = 0; l < size; l++){
,内循环中为i
,并将其用作j
:
[i][j]
将其视为array[i][j] = '1';
&amp; Out
- &gt; In
。
当您打印数组时,您“旋转”,[Out][In]
是外部&amp; k
是内在的,您将它们用作l
:
[l][k]
这就像在做printf("%c", array[l][k]);
虽然所有值相同([In][Out]
)并且矩阵为正方形(宽度==高度)并不是问题,但它不适用于其他值或维度,并且令人困惑。
最后,您尝试打印新行是错误的。你有一个'1'
说明符,但之后你并没有真正使用任何有效的字符,而且你不需要它,只需打印:
%
所以,总之,代码应该是:
printf("\n");
(作为附注,run(int x)
{
int size = 2*x -1;
char array[size][size];
int i,j;
for(i = 0; i < size; i++){
for(j = 0; j < size; j++){
array[i][j] = '1';
}
}
int k, l;
for(k = 0; k < size; k++){
for(l = 0; l < size; l++){
printf("%c", array[k][l]);
}
printf("\n");
}
}
&amp; k
并非真正需要,您只需重复使用l
&amp; i
)