J'ai pris une gamme de caractères de certains opérateurs. Chaque fois qu'il reçoit un opérateur, je veux effectuer l'opération en utilisant cet opérateur. Comment puis-je faire cela?
#include<stdio.h>
int main()
{
char *c = "+-*/" ;
int a = 10 , b = 5 ;
for(int i = 0 ; c[i]!='\0';i++){
int z = a c[i] b ;
printf("%d ",z) ;
}
}
3 Réponses :
Qu'en est-il de quelque chose comme ceci (dans la boucle)
Je sais que je peux faire ça ... mais c'est tellement long .it sera utile s'il y a une autre façon de le faire
Le moyen le plus simple consiste à déplacer la logique à une fonction distincte et à commuter le caractère pour sélectionner Action
#include<stdio.h>
int errCode = -999876; // magic error code exmpl
int useArithm(char c, int a, int b) {
switch (c) {
case '+' : {
return a + b;
}
break;
case '-' : {
return a - b;
}
break;
case '*' : {
return a * b;
}
break;
case '/' : {
if (b == 0) {
// bed b msg ;)
return errCode;
}
return a / b;
}
break;
}
return errCode;
}
int main() {
char *c = "+-*/" ;
int a = 10 , b = 5 ;
for (int i = 0; c[i]!='\0'; i++) {
if (c[i] == '+' || c[i] == '-' || c[i] == '*' || c[i] == '/') {
int z = useArithm(c[i], a, b);
if (z == errCode) {
// error action
}
printf("%d ",z) ;
} else {
// error msg
break;
}
}
return 0;
}
Le code d'erreur magique est une mauvaise idée (bien que j'aime le reste). Utilisez un Par défaut: CODE> CAS et EXIT {EXIT_FAILURE}; CODE> à partir de là. Étant donné que la fonction renvoie int code>, renvoyer une partie int code> comme un code d'erreur est un non-go. (mais vaut toujours la peine UV)
@David C. Rankin Oui, mais la question concerne la logique de la définition de l'opérateur. Le sujet de la récupération de code d'erreur est idéal pour la discussion dans ce sujet. Et je sélectionne que ce n'est que Exmpl;)
D'accord, c'est pourquoi je l'ai négligé et j'ai toujours donné votre réponse à la tête, mais cela mérite un commentaire à la lumière du type de retour de la fonction. Idéalement, le contrôle de l'opérateur du contenu de la matrice serait effectué avant de passer à la fonction pour éliminer cette situation collante.
B code> ne devrait pas être zéro.
@Biswapriyo - Fixez-le)
Il n'y a rien de construit.
Une déclaration de cas sera légèrement plus brillante que la logique if / sinon, mais pas si vous prenez en compte les instructions de pause. P>
Une autre option serait une carte de fonction . En C ++, quelque chose comme (notez que ceci est un code de pensée non pondéré): p> mais pour implémenter une carte et le peupler dans C et déclarer que toutes les petites fonctions travailleur seraient tellement Code BLOAT! P> P>
Cette question est marquée [c] code>. Veuillez éviter [c ++] code> réponses. Peut-être une comparaison du commutateur C code> Code source et C ++ mapper code> Source est prudent avant de commenter le "code de bloat".
Yah je sais à ce sujet. Ce n'est pourquoi je suis confus, y a-t-il quelque chose en C aussi pour le faire facilement !!
Mon point était que pour mettre en œuvre une carte et un moteur d'exception en C serait tant de code de gonfleur, pas la comparaison avec la déclaration de cas.
Oui, c'est un point valide, cela ressemblerait à la source C ++ pour mappe code> et la source de la manipulation d'exception.
Non, ce serait pire que cela, comme vous n'obtenez aucun emballage d'objet, tout aurait besoin de noms de long 5 milles, etc. C'est pourquoi C ++
Vous devez écrire une fonction qui effectue le bon fonctionnement en fonction des entrées.
int z = a c [i] b; code> ne fait pas ce que vous pensez que cela fait.@ Davidc.rankin je suppose que nous prenons cette ligne comme pseudocode pour "s'il vous plaît me fixer"