2015-03-12 1 views
0

Когда я компилирую следующий исходный код, на выходе нуль отображается неправильно. Зачем? Я хочу, чтобы текст вывода имеет следующий формат:Код C не отображается в нулевом номере вывода

01 02 03 04 
05 06 07 08 

не 1 2 3 4 ....

Как я могу решить эту проблему?

#include "stdio.h" 

int main(int argc, char const *argv[]) 
{ 
    int a[3][4] = { 
    {00, 01, 02, 03} , /* initializers for row indexed by 0 */ 
    {04, 05, 06, 07} , /* initializers for row indexed by 1 */ 
    {08, 09, 10, 11} /* initializers for row indexed by 2 */ 
    }; 

    for (int i = 0; i < 3; ++i) 
    { 
     for (int t = 0; t < 4; ++t) 
     { 
      printf("%d\t", a[i][t]); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 
+2

'printf ("% 02d \ b ", a [i] [t]);' – jsantander

ответ

0

Проверьте printf manual page

Посмотрите на обивке с 0:

Значение должно быть нулями. Для преобразований F, g и G d, i, o, u, x, X, a, A, e, E, f, преобразованное значение заполняется слева нулями, а не пробелами. Если появляются и 0 и-флаги, флаг 0 игнорируется. Если точность задана с числовым преобразованием (d, i, o, u, x и X), флаг 0 игнорируется. Для других преобразований поведение не определено.

и искать ширина поля:

В поле Ширина

Необязательный десятичное число строк (с ненулевой первой цифры) с указанием минимальной ширины поля. Если преобразованное значение имеет меньшее количество символов , чем ширина поля, оно будет дополнено пробелами слева (или вправо, если установлен флаг левой регулировки). Вместо строки десятичной цифры можно написать «*» или «* m $» (для некоторого десятичного числа целое число m), чтобы указать, что ширина поля задается в следующем аргументе или в m-м аргументе соответственно , который должен быть типа int. Отрицательная ширина поля принимается как флаг «-», за которым следует положительная ширина поля . Ни в коем случае несущественное или малое поле ширина вызывает усечение поля; если результат преобразования равен шире, чем ширина поля, поле расширяется, чтобы содержать результат преобразования .

использование раствора:

printf("%02d\b", a[i][t]); 

и опускать 0 из буквальных (01, 02 ...), или они будут приняты в качестве восьмеричных чисел.

0

0 перед номером сообщает компилятору, что этот номер находится в восьмеричной нотации. Вы не можете делать это с помощью цифр, только с символами или с правильным форматом в printf. На самом деле ваш код является неправильным и никогда не должен компилироваться, поскольку в восьмеричных цифрах нет 8 и 9.

Смежные вопросы