J'ai un problème de calculatrice. Je veux programmer une calculatrice, mais cela "fonctionne" avec des lettres aussi. Si je saisis les lettres "s" "s" et "u", je reçois la réponse 0. Comment réparer cela?
# include <stdio.h>
int main() {
char operator;
int a,b;
printf("Enter the operator (+, -, *, /): ");
scanf("%c", &operator);
printf("Enter two number and seperate them with space: ");
scanf("%lf %lf",&a, &b);
switch(operator)
{
case '+':
printf("%.2lf + %.2lf = %.2lf",a, b, a + b);
break;
case '-':
printf("% 2lf - %.2lf = % 2lf",a, b, a - b);
break;
case '*':
printf("%.2lf * %.2lf = %.2lf",a, b, a * b);
break;
case '/':
printf("%.2lf / %.2lf = %.2lf",a, b, a / b);
break;
default:
printf("Error!");
}
return 0;
}
3 Réponses :
mis à jour: strong> J'ai trouvé mon code oolest dans le dossier de bibliothèque peut-être que cela vous aide dans ce problème. Cela fonctionnera certainement. P> char operator;
printf("Enter the Operation in ( * , / , - , + )");
scanf("%s",&operator);
if(operator!='+' || operator!='-' || operator!='*' || operator!='/')
{
return 0;
}
Cela ne presse pas eof code>. Vous devez explicitement vérifier le nombre d'éléments à numériser: si (scanf ("% c", & opérateur)! = 1) code> dans le cas des deux opérandes à point flottant, vous devez vérifier "code > 2 code> Parce que le premier peut avoir une entrée valide, mais le second pourrait ne pas, dans quel cas FSCANF code> retournera 1 code> au lieu de 2 code> que votre chèque ne va pas attraper.
Si je mettez la ligne que vous avez ajoutée, mon code saute directement à défaut et imprime "l'erreur" même si je mets des opérateurs et des chiffres corrects.
Dont la ligne? Sayed's ou le mien?
@Meathervane les deux. Où je devrais mettre la ligne: juste après le premier scanf ou plus tard?
Cela n'a pas de sens: il est i> la ligne scanf code>.
@Weathervane pouvez-vous en quelque sorte donner le code correct, s'il vous plaît?
Laissez-nous Continuez cette discussion en chat .
Désolé pour le mauvais code. Peut-être devriez-vous vérifier le code mis à jour maintenant.
J'ai apporté les corrections discutées dans des commentaires
Comme vous le savez divisant par 0 ne peut pas être fait. Alors, comment faire du programme pour donner une erreur lors de la division de 0?
Je l'ai eu du travail. C'était plus facile à faire que je pensais. Donc, le bon code, je vais mettre un commentaire à répondre. #include
int main(void) { // correct definition
char operator;
double a,b; // correct type
printf("Enter the operator (+, -, *, /): ");
if(scanf("%c", &operator) != 1) { // add error check
puts("Bad operator entered");
return 1;
}
printf("Enter two number and seperate them with space: ");
if(scanf("%lf %lf",&a, &b) != 2) { // add error check
puts("Bad value(s) entered");
return 1;
}
switch(operator)
{
case '+':
printf("%.2lf + %.2lf = %.2lf",a, b, a + b);
break;
case '-':
printf("%.2lf - %.2lf = % 2lf",a, b, a - b); // corrected typo
break;
case '*':
printf("%.2lf * %.2lf = %.2lf",a, b, a * b);
break;
case '/':
if(b!=0){ //added an if-sentence
printf("%.2lf / %.2lf = %.2lf\n",a, b,
a / b);
}
else
printf("Can't divide by zero\n");
break;
default:
printf("Error!");
}
return 0;
}
Veuillez vérifier la valeur de retour de
scanf code> qui dans ce cas doit être1 code> et2 code> respectivement dans le premier et le deuxième appel.Si vous ignorez le
scanf code> pièce et utilisez simplementGetcharner Code>Vous pouvez lire dans un personnage à la fois et analyser cela de manière plus générique.Qu'est-ce que c'est censé faire avec des lettres?
@Eugenesh. Si j'utilise des lettres, il donne une réponse f.e: "0,00 + 0,00 = 0,00"
Notez que
scanf ("% LF% LF", & s, & b); code> s'attend à des pointeurs surDOUBLE S, B; CODE> variables, mais vous avez définiint A, B ; code> est-ce le code exact?Ah, je vois. Je pensais que vous voulez que cela fonctionne avec des lettres aussi.
Est
& s code> une faute de frappe? Je suppose que vous vouliez dire& a code>. MaisA code> etB code> sont TYPEINT code> et le% LF code> dans lescanf code> appel S'attend à ce quea code> etB code> soit Tapezdouble code>.Après la modification, vous avez toujours le type de variable incorrect, ou le format spécificateur de format (ou les deux ??) Vous n'avez pas d'avertissement de compilateur?
@Ianabbott Merci, c'était une faute de frappe.
Si
scanf code> ne renvoie pas 2 pour le second cas (deuxdouble code> S), vous devez signaler une erreur comme cela signifie que l'entrée au programme est invalide. De même pour le premier cas (unchar code>), vous devez vérifier quescanf code> renvoyé 1.@Weathervane je n'ai pas d'avertissement de compilateur. Quel devrait être le type de variable correct?
Vous devriez utiliser
double A, B; code> Votre compilateur a-t-il un réglage de niveau d'avertissement?@ Weathervane I utilise dev-C ++, je pense qu'il n'y a pas de paramètre de niveau d'avertissement.
Avez-vous essayé l'option
-wall code>? Ou "Outils - Options de compilateur - Paramètres - Avertissements".@Eugenesh. Si cela est possible, j'aimerais que si l'une des lettres A ou B est une lettre, la réponse serait juste A et B écrite avec l'opérateur. F.E: 2 / S ou S * 9 ou S + S