2017-09-02 7 views
-1

J'ai une méthode qui ressemble à ceci:C++? opérateur continue opérateur boucle

bool Perfect(int num) { 
    int sum = 0; 
    for (int i = 1; i < num; i++) 
    { 
     num%i == 0 ? sum += i : continue; 
    } 
    return sum == num ? true : false; 
} 

J'essaie de combiner ici? opérateur continuer opérateur ...

donc logiquement si la déclaration ici est faux dans cette ligne:

num%i == 0 ? sum += i : continue; 

Je vais sauter l'itération ou ne rien faire?

Si je le fais comme ça le compilateur signale une erreur comme:

expected an expression 

Et en cas comme celui-ci:

num%i == 0 ? sum += i 

Il dit:

Expected a ':' 

Y at-il façon d'utiliser continuer avec? opérateur ou tout simplement éviter tout faux cas en quelque sorte ???

+9

Ne pas forcer l'utilisation d'un ternaire dans un cas comme celui-ci; cela n'a aucun sens. Utilisez simplement if/else. Aussi, 'return sum == num? true: false; 'devrait simplement être écrit comme' return sum == num'; – Carcigenicate

+0

@Carcigenicate Je suis juste en train d'explorer les possibilités de C++, c'est pourquoi je suis curieux de savoir s'il y a une solution pour utiliser l'opérateur ternaire avec ce genre de cas :) – User987

+4

Les ternaires sont utilisés pour renvoyer conditionnellement une valeur. 'continuer' n'évalue rien d'utile. Expérimenter est bon, mais c'est aussi reconnaître le bon outil pour le bon travail. – Carcigenicate

Répondre

3
bool Perfect(int num) { 
    int sum = 0; 
    for (int i = 1; i < num; i++) 
    { 
     if(num % i == 0) 
     sum += i; 
    } 
    return sum == num; 
} 

Utilisez une instruction if. Pas besoin de continue puisque vous n'avez aucune autre déclaration après sum += i.

+0

utilisez simplement 'return sum == num;' –

2

C++ et C ont les deux déclarations et expressions (notez qu'une cession ou un appel de fonction est une expression, et que les expressions sont des déclarations). Ce sont des choses syntaxiques (et sémantiques) différentes.

Vous pourriez avoir un code (mais cela est de style bizarre comme une déclaration réduite à une ?: expression conditionnelle) dans votre boucle for:

(num%i == 0) ? (sum += i) : 0; 

(quand num%i est non nul, qui sera évalué à 0 qui n'a pas d'effet secondaire significatif, BTW que la dernière occurrence de 0 pourrait être 1234 ou toute expression intégrale constante)

Certains langages de programmation (notamment Scheme , lire SICP) ont seulement des expressions (et pas d'instructions).

Le ternaire ?: operator s'applique aux expressions et donne une expression (donc ne peut pas être utilisé pour les instructions).

Les instructions conditionnelles utilisent le mot clé if. Dans votre cas, il est beaucoup plus lisible (parce que vous utilisez sum += i uniquement pour son effet secondaire) et une instruction if est ici plus facile à comprendre.

2

Vous ne pouvez pas utiliser un opérateur ternaire de cette manière. Vous l'utiliseriez normalement pour assigner une valeur à une variable basée sur une expression vraie ou fausse. Par exemple.

int j, i, 

j = (i == 2) ? 5: 10; 

Si i est égal à 2, alors j est donné la valeur de 5 autre si i est pas égal à 2, alors j est donné la valeur de 10.