-2
votes

Comment vérifier si le symbole entré est char ou non?

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;
}

c

15 commentaires

Veuillez vérifier la valeur de retour de scanf qui dans ce cas doit être 1 et 2 respectivement dans le premier et le deuxième appel.


Si vous ignorez le scanf pièce et utilisez simplement Getcharner 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); s'attend à des pointeurs sur DOUBLE S, B; variables, mais vous avez défini int A, B ; est-ce le code exact?


Ah, je vois. Je pensais que vous voulez que cela fonctionne avec des lettres aussi.


Est & s une faute de frappe? Je suppose que vous vouliez dire & a . Mais A et B sont TYPE INT et le % LF dans le scanf appel S'attend à ce que a et B soit Tapez double .


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 ne renvoie pas 2 pour le second cas (deux double S), vous devez signaler une erreur comme cela signifie que l'entrée au programme est invalide. De même pour le premier cas (un char ), vous devez vérifier que scanf 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; 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 ? 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


3 Réponses :


0
votes

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;
}


8 commentaires

Cela ne presse pas eof . Vous devez explicitement vérifier le nombre d'éléments à numériser: si (scanf ("% c", & opérateur)! = 1) dans le cas des deux opérandes à point flottant, vous devez vérifier "code > 2 Parce que le premier peut avoir une entrée valide, mais le second pourrait ne pas, dans quel cas FSCANF retournera 1 au lieu de 2 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 la ligne scanf .


@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.



1
votes

J'ai apporté les corrections discutées dans des commentaires xxx


1 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?



0
votes

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;
}


0 commentaires