Как включить формальный оператор if в параметры в C? - PullRequest
0 голосов
/ 31 декабря 2018

Например, у меня есть некоторый код для таблицы умножения, но чтобы она выглядела немного более аккуратно, у меня в распечатке есть% s, в котором каждое число отсчитывается на основе, если это двузначное число или однозначное число.

printf(" %d %s", columns * multiplier,
               (columns * multiplier < 10) ? "  " : " ");

Оператор if, который я имею, является сокращенной версией (и, насколько мне известно, он может иметь только 2 условия?), И это единственный способ, которым я знаю, как включить оператор if для% sв строке printf как сделать оператор if, который может иметь несколько условий?Как для трехзначных или четырехзначных цифр.

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Практически вы, вероятно, использовали бы параметр минимальной ширины поля для форматера printf вместе с левым флагом выравнивания (-), например, printf(" %-5d", 1);, но если вы хотите использовать это как возможность поиграть с троичным,обратите внимание, что его синтаксис :

conditional-expression:
                 logical-OR-expression
                 logical-OR-expression ? expression : conditional-expression

На английском языке это означает, что вы можете вложить его:

#define PR(X) printf(" %d %s", X,  \
            (X)<10 ? "   " :  \
            (X)<100 ? "  " :  \
            (X)<1000 ? " " : "" \
            )

#include <stdio.h>
int main(){
    printf(" %-5d", 1);
    printf(" %-5d", 22);
    printf(" %-5d", 333);
    printf(" %-5d\n", 4444);

    //PRINTS:
    //1     22    333   4444 

    //The same thing with the ternary:
    PR(1);
    PR(22);
    PR(333);
    PR(4444);
    puts("");

}
0 голосов
/ 31 декабря 2018

Вы можете сделать что-то вроде: x = a ? b : (c ? d : e), что равно:

if(a){
     return b;
 }else if(c){
     return d;
 }else{
     return e;
 }

или

x = (a && b) ? c : d

, что равно:

if(a && b){//both a and b are true
     return c
 }else{
     return d;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...