Как напечатать положительное число как отрицательное число через printf - PullRequest
3 голосов
/ 23 сентября 2010

Читая о printf (), я обнаружил, что он может печатать числа как положительные, так и отрицательные по желанию пользователя, используя следующий код (для -). Но код не работает, и вывод является положительным значением. Пожалуйста, укажите гдеошибка. Спасибо

#include<stdio.h>
int main()
{
  printf (" %-d\n", 1977);
  return 0;
}

Ответы [ 3 ]

7 голосов
/ 23 сентября 2010

Из ваших комментариев похоже, что вы неправильно прочитали эту страницу .Спецификаторы - и + делают две совершенно разные вещи, и ни одна из них не делает то, что, по вашему мнению, '-' должно делать.

Как уже отмечали другие, - оправдывает влево.Спецификатор + выводит положительные числа с начальным знаком плюс (а отрицательные числа по-прежнему получают начальный знак минуса):

printf("%d %d %+d %+d\n", -10, 10, -10, 10);

выводит:

-10 10 -10+10

4 голосов
/ 23 сентября 2010

%-d Отрегулирует целое поле слева, оно не будет переворачивать знак.Сделайте это вместо:

printf (" %d\n", -1977);

Вот полная выдержка из print(3) под Флаговые символы :

       -      The  converted  value is to be left adjusted on the field bound‐
              ary.  (The default is right justification.)  Except for  n  con‐
              versions,  the  converted  value  is  padded  on  the right with
              blanks, rather than on the left with blanks or zeros.  A - over‐
              rides a 0 if both are given.

Update0

Теперь я вижу ваш истинный вопрос: чтобы добавить к выводу соответствующий знак, используйте символ флага + для явного отображения знака.Снова вот выдержка:

       +      A sign (+ or -) should always be placed before a number produced
              by a signed conversion.  By default a sign is used only for neg‐
              ative numbers.  A + overrides a space if both are used.

И используйте это так (командная строка printf в основном идентична):

matt@stanley:~/cpfs$ printf "%+d\n" 3
+3
matt@stanley:~/cpfs$ printf "%+d\n" -3
-3
matt@stanley:~/cpfs$ printf "%+u\n" -3
18446744073709551613

Имейте в виду, что явный запрос знака выиграл 't подразумевает обработку соответствующего целого числа со знаком, как в примере %u выше.

3 голосов
/ 23 сентября 2010

printf (" -%d\n", 1977); выведет -1997 (плохой способ сделать это), если вы хотите, чтобы отрицательные числа стали положительными, выполните printf (" %d\n", -1 * 1977); (хороший способ сделать это)

прочитайте ссылка на идею о том, как работают спецификаторы формата

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...