4 votes

Comment donner la valeur 'infini' à un double par le biais de cin en C++ ?

Dans mon programme, je prends une valeur de pente comme entrée de l'utilisateur. L'extrait de code ressemble à ceci :

double m;
std::cout << "Enter slope value:";
std::cin >> m;

Mais pour l'instant, je n'arrive pas à donner la valeur "infini" à cette pente. Si l'on tape 'inf', m stockera 0, peut-être à cause d'une erreur d'analyse. Si je tape un très grand nombre comme 1e1000, m stocke DBL_MAX c'est à dire 1.79769e+308.

Que dois-je taper dans la console pour que m contienne la valeur "infini" (pente de la ligne verticale) ?

5voto

user17732522 Points 943

Que dois-je taper dans la console pour que m contienne la valeur "infini" (pente de la ligne verticale) ?

Je ne pense pas que std::istream::operator>>(double&) le soutient actuellement.

En fin de compte, il utilisera std::strtod pour convertir la chaîne extraite en un double y std::strtod devrait accepter INF y INFINITY sans tenir compte de la casse et avec l'option + / - préfixe.

Cependant, l'extraction des caractères se fait actuellement par le biais de std::num_get::do_get qui ne prend en compte que les caractères 0123456789abcdefpxABCDEFPX+- comme valide.

En LWG 2381 qui résout certaines incohérences entre >> y strtod Les inifinités et les NaN sont également mentionnés comme n'entrant pas dans le champ d'application de la résolution.

Vous devrez donc lire une chaîne de caractères et appeler std::strtod / std::stod / std::from_chars manuellement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X