Я не уверен, что именно вы подразумеваете под подавлением, но один (сложный) способ сделать выходные изменения таким образом, что вы можете (или не хотите) это иметь строковую переменную, представляющую строку формата в printf
например,
char format[20];
int A, B, C, D;
strcpy(format, "%d %d %d %d");
if (C==0) strcpy(format, "%d %d [%d] %d");
printf(format, A,B,C,D);
Недостатком этого метода является то, что вы все равно должны печатать A, B, C и D и в таком порядке, но вы, безусловно, можете 'пометить' что-то другое с текстом вокруг одного или несколькихчем одно из чисел ....
если int A=2, B=3, C=0, D=0;
, то печатается 2 3 [0] 0
, но если int A=2, B=3, C=1, D=0;
, то печатается 2 3 1 0
.
Если это последнее числовы хотите подавить, тогда вы можете использовать ....
char format[20];
int A, B, C, D;
strcpy(format, "%d %d %d %d");
if (D==0) strcpy(format, "%d %d %d");
printf(format, A,B,C,D);
но я не думаю, что это хорошая практика обязательно.Это будет зависеть от того, как printf отреагирует на получение дополнительного параметра ....
Теперь вывод будет 2 3 0 1
, если int A=2, B=3, C=0, D=1;
, но 2 3 0
, если int A=2, B=3, C=0, D=0;
Наконец, вы можете подавить, используя приведенный ниже код
char format[20];
int A=2, B=3, C=0, D=1;
strcpy(format, "%d %d %d %d");
if (C==0) strcpy(format, "%d %d %d\b\b %d");
printf(format, A,B,C,D);
, потому что '\ b' выполняет возврат, поэтому при условии, что ваш терминал хорошо работает с \b
, вы должны иметь возможность подавить aчисло в середине - обратите внимание, что это не будет работать с числом в конце, потому что \b
перемещает курсор, но не стирает, поэтому вам нужно будет напечатать некоторое пространство после