0

を使用して、2D ベクトルを stdio に書き込むこの関数を作成しました。printf()

static void printSheet ( const storage::twoDVec& Sheet, char format='g'
                       , char elDelim='\t', char vecDelim='\n') 

    const size_t vecSize = Sheet.vecSize;
    const size_t subVecSize = Sheet.subVecSize;
    char pFormat[3] = {'%', format, elDelim};
    for ( size_t y = 0; y < vecSize; y++ ) {
        for ( size_t x = 0; x < subVecSize; x++ ) {
            printf(pFormat, Sheet.get( y, x ));
        }
    putchar(vecDelim);
    }
}

subVecSize[10, 13] でない限りうまく機能し、フォーマットはそうではありません

x x x
x x x
x x x

為にsubVecSize = 10

1
2
...
9
10

1
2
...
9
10

(繰り返し)。for1112subVectors は斜めにスクロールし、for13のサブベクトルはそれ自体を上書きします。たとえばvecSize==1 && subVecSize==3、出力として1つの数値しか得られない場合。

私は何かを見落としていますか、それとも基本的なことを理解していませんprintf()か? に変更elDelim' 'ても変わりません。

4

1 に答える 1

5

pFormat配列は null で終了していません。これを試して

char pFormat[4] = {'%', format, elDelim, '\0'};
于 2013-09-28T22:39:15.237 に答える