Comment écrire “si x est égal à 5 ou 4 ou 78 ou...” en C
J'ai une petite question sur l'utilisation d'opérateurs logiques dans une instruction if.
Actuellement, j'ai une instruction if qui vérifie si x est égal à 5 ou 4 ou 78:
if ((x == 5) || (x == 4) || (x == 78)) {
blah
}
Et je me demandais si je pouvais juste condenser tout ça pour:
if (x == 5 || 4 || 78) {
blah
}
Désolé pour ces une question de base, j'ai juste commencé à apprendre le C.
non, vous ne peut pas le faire. Vous devez vérifier un état contre un autre état et de les connecter avec ou
COBOL est un raccourci comme ça. Mais je ne pense pas que vous voulez y aller.
Haha, ouais je ne suis certainement pas. Notre maître de conférences seulement nous permet d'utiliser la condition simple choses, puisque tout le monde est au début de C. Aucune raison pour que ce type de raccourci n'est pas autorisé en C?
Vous ne pouvez pas utiliser ce raccourci, car il est parfaitement valide le code C, comme vous l'avez écrit (en ignorant l' 'blah' partie). Il n'a tout simplement pas faire ce que vous pensez qu'il devrait.
Probablement parce qu'il aurait fait de l'écriture de la première compilateurs C beaucoup plus compliqué. Et l'opérateur priorités aurait été beaucoup plus difficile de le faire correctement pour faire ce genre de déclaration de travaux. En vertu de C les règles de priorité
||
opérateurs. Aussi votre =
doit être ==
.COBOL est un raccourci comme ça. Mais je ne pense pas que vous voulez y aller.
Haha, ouais je ne suis certainement pas. Notre maître de conférences seulement nous permet d'utiliser la condition simple choses, puisque tout le monde est au début de C. Aucune raison pour que ce type de raccourci n'est pas autorisé en C?
Vous ne pouvez pas utiliser ce raccourci, car il est parfaitement valide le code C, comme vous l'avez écrit (en ignorant l' 'blah' partie). Il n'a tout simplement pas faire ce que vous pensez qu'il devrait.
Probablement parce qu'il aurait fait de l'écriture de la première compilateurs C beaucoup plus compliqué. Et l'opérateur priorités aurait été beaucoup plus difficile de le faire correctement pour faire ce genre de déclaration de travaux. En vertu de C les règles de priorité
x == 4 || 5
s'analyse comme (x == 4) || 5
, tandis que le raccourci que vous suggérer l'obligeant à analyser x == (4 || 5)
, ce qui nécessiterait d'autres, sans doute plus les opérations les plus courantes (comme x == 0 || y == 0
) à utiliser plus de parenthèses.OriginalL'auteur stockoverflow | 2011-03-16
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de raccourci, mais vous avez besoin pour réparer votre opérateur d'égalité.
OriginalL'auteur
Tout d'abord, vous êtes en utilisant des affectations pas de tests d'égalité dans votre ifs. La première méthode (avec des substitutions pour l'égalité) est le meilleur moyen de faire le test, mais si vous avez beaucoup d'options possibles, il pourrait y avoir de meilleures façons. La deuxième façon peut compiler, mais il ne peut pas faire ce que vous voulez, il retournera toujours vrai, puisque les deux 4 et 78 évaluer de vrai et de ce que vous faites est d'évaluer si 5 (le résultat de l'attribution de 5 à x) ou 4 ou 78 sont remplies. Une instruction switch peut être une alternative possible.
OriginalL'auteur tvanfosson
Non, vous ne peut pas et le test d'égalité est
==
, pas=
OriginalL'auteur Matthieu
Il n'y a pas de raccourci pour l'instruction if, mais je suggère considérant:
OriginalL'auteur abelenky
@oncle brad est sur place, mais plus tard, vous aurez probablement apprendre à propos de quelque chose qui s'appelle un
switch
déclaration. Il semble funky, mais est souvent utilisé dans ces sortes de situations (où plusieurs valeurs possibles de toutes les variables ont le même effet):Si vous ne souhaitez utiliser un
switch
instruction lorsque la signification d'unif
déclaration est moins clair: la plupart des compilateurs ces jours sont assez intelligents pour générer optimale du code machine.instructions de commutation sont loin d'être l'avancée des choses. Aussi, personne n'a souligné que
x == 5 || 4 || 78
est parfaitement valide C déclaration, mais il ne signifie pas ce que vous voulez dire. En C, toute expression peut être utilisée dans un contexte booléen; c'est vrai s'il est non nul et faux s'il est à zéro.4
est non-nul, alors que l'expression est toujours vrai. Vous devriez obtenir vous-même un bon C livre, le lire, et de faire tous les exercices (qui devrait inclure des questions comme "Quelle est la valeur dex == 5 || 4
?"), et poser des questions sur des choses que le livre ne couvre pas."personne n'a souligné" -- oups, je me suis trompé à ce sujet.
OriginalL'auteur Jonathan Grynspan
Non, désolé, vous ne pouvez pas, vous avez à écrire toutes les expressions. Pour de très longues listes de nombres pour comparer, on peut mettre les chiffres dans un tableau, et en boucle sur la liste; mais vous devez avoir une douzaine de numéros avant qu'commencé à ressembler à une bonne idée.
OriginalL'auteur Ernest Friedman-Hill
Non, vous ne pouvez pas le faire en C. Votre premier exemple de code est également incorrect. Il y a une importante distinction entre la cession (
=
) et de l'équivalence (==
) en C. Quand vous avez écritx = 5
dans votre expression, ce sera fait, de compiler et d'évaluer à 0 ou 1 (faux ou vrai) avant d'être logiquement OU ed avec la partie suivante de l'expression!Votre deuxième exemple de code est également valide en C, mais il ne fait pas ce que vous voulez qu'il fasse. Vous lisez l'énoncé "(x est affectée à 5) ou vrai ou faux." C'est parce que toute valeur non nulle en C est logiquement vraie. Ainsi, x contient la valeur 5, et d'évaluer à true, ce qui rend votre si condition est vraie. Le reste de l'expression n'a pas d'importance puisque le
||
opérateur de court-circuits.OriginalL'auteur djs
Il a été répondu dans le temps qu'il m'a fallu pour se connecter, mais vous pouvez utiliser le commutateur, et de le briser en fonction de
Ensuite vous suffit d'appeler la méthode à chaque fois que vous besoin de vérifier l'int contre les cas.
Certes, cet exemple est assez stupide, mais pour une plus grande sélection de cas, et ceux qui ont été évalués à plusieurs reprises, vous pourriez faire quelque chose comme cela pour les simplifier et de les réutiliser une partie du code.
boolean
comme un type. ;p aussi je ne vois pas de raison de revoir ce à une fonction (ni est-il un bon refactoring), mais je ne vais pas voter pour vous.Je n'ai pas utilisé le C environ 6 ans...et un rapide wiki recherche montre que vous êtes correct. Je vais l'adapter pour le rendre plus syntaxiquement correct.
Donc un
int
(32 bits) est une solution plus raisonnable qu'unbool
(8 bits)? (à l'aide de bool aurait été parfait, juste à vous harceler pour l'utilisation de l' .NET-esque version.)Techniquement C99 a un
_Bool
type (avec#define bool _Bool
) type mais beaucoup de code utilise encoreint
de toute façon.Lutz: Vous obtenez seulement
#define bool _Bool
si vous incluez<stdbool.h>
.OriginalL'auteur Gopherkhan
Un suppléant de la pensée: il n'y a pas de "raccourci", si vous avez beaucoup de chiffres, il peut être plus facile pour une longueur de code et en tapant la santé mentale de toutes les mettre dans un tableau et de contre-vérifier le tableau dans une boucle. Si vous avez à comparer à beaucoup de chiffres, plus d'une fois, de les trier dans un tableau et utiliser les binaires de recherche.
Pour 3 numéros, cependant, que vous devez le faire de la "longue".
OriginalL'auteur Jeff Ferland
Vous pouvez faire la boucle for si c'est une longue liste, comment jamais, qui n'a pas vraiment gérer les opérateurs logiques :-...
euh... n'ai pas fait de c... jamais... vous devriez le prendre C++...
J'aime l'algorithme de recherche de moi-même.
OriginalL'auteur Brandon Runyon
OriginalL'auteur Prince John Wesley