Maison >développement back-end >C++ >Comment gérer correctement les erreurs de division par zéro en C ?

Comment gérer correctement les erreurs de division par zéro en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-11 20:29:11939parcourir

How to Properly Handle Divide-by-Zero Errors in C  ?

Attraper l'exception Divide by Zero

Lorsque vous essayez de diviser par zéro en C, il n'est pas automatique pour le compilateur ou le runtime de lever une exception . Le comportement n'est pas défini, ce qui signifie qu'il pourrait entraîner une exception ou un autre résultat imprévisible.

Dans l'extrait de code fourni :

int i = 0;

cin >> i;

try {
    i = 5/i;
}
catch (std::logic_error e) {

    cerr << e.what();
}

Le code n'attrapera aucune exception lors d'une tentative de division par zéro car la division entière par zéro n'est pas considérée comme une exception dans la norme C.

Pour gérer cela, vous devez vérifier manuellement la condition de division par zéro et lancer une exception en conséquence. La norme C ne définit pas explicitement d'exception pour la division par zéro, vous pouvez donc choisir de lever une exception telle que :

  • std::overflow_error : car un débordement peut se produire lorsque La virgule flottante IEEE754 génère l'infini pour diviser par zéro.
  • std::domain_error : Comme cela indique un problème avec la valeur d'entrée (c'est-à-dire le dénominateur zéro).

Voici un extrait de code modifié qui montre le lancement d'une exception de division par zéro :

int intDivEx(int numerator, int denominator) {
    if (denominator == 0)
        throw std::overflow_error("Divide by zero exception");
    return numerator / denominator;
}

try {
    i = intDivEx(5, 0);  // Will throw an overflow_error exception
} catch (std::overflow_error &amp;e) {
    cerr << e.what() << endl;
}

Dans ce Par exemple, la fonction intDivEx vérifie la division par zéro et renvoie une exception std::overflow_error si elle est rencontrée. Cela vous permet de gérer l'exception dans votre code.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn