尝试在C中打印char二维数组时,%符号继续打印

时间:2015-10-26 22:13:56

标签: c arrays formatting

我是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%
%
%
%
%
%
%
%
%

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