2015-02-25 5 views
0

В программе на C++ под Windows 7 с использованием VS2013 и под Ubuntu 14.04.1 с использованием g ++ 4.6 я озадачен работой printf().printf с модификатором ширины не может печатать значение

При использовании модификатора второй ширины вместо пробела выбирается пробел 0.
При установке на другое значение, например, -1, оно печатает его. Без модификатора он печатает 0, как и ожидалось.

Я вставил фактический, соответствующий код в другую программу, и он вел себя одинаково.

В чем может быть проблема?

#include <stdio.h> 

int main(){ 
    int x = 1, z = 0; 
    printf ("%2.d: %2.d\n", x, z); // fails to print 0 
    printf ("%2.d: %d\n", x, z); // 2nd %2. absent, prints as expected 
    return 0; 
} 

Выход:

1: 
1: 0 
+1

вам нужен другой номер после того, или '' звездочка '*'. Например,% 2.2d будет печатать как минимум 2 цифры. См. Http://www.cplusplus.com/reference/cstdio/printf/ –

ответ

3

точка должна перейти на левый

#include <stdio.h> 

int main() 
{ 
    int x = 1, z = 0; 
    printf ("%.2d: %.2d\n", x, z); // fails to print 0 
    printf ("%.2d: %d\n", x, z); // 2nd %2. absent, prints as expected 
    return 0; 
} 

Выход:

01: 00 
01: 0 
+0

Я действительно думаю, что он хочет '% 2.1d' –

+0

Да, я хочу ширину в 2 столбца. Добавление спецификатора точности (% 2.1d) сделало трюк, _thanks много_. Нигде я не читал, что у вас должен быть спецификатор точности для спецификатора ширины для работы, на самом деле они явно описаны как независимые друг от друга. Самое странное - я думал, что знаю printf(). – Shellsunde

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

  • Нет связанных вопросов^_^