cpp/cpp06/ex00/main.cpp
Alexandre POMMIER a1d3d379de cpp06 first try
2022-08-06 19:42:17 +02:00

91 lines
2.7 KiB
C++

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* main.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/08/06 16:53:32 by apommier #+# #+# */
/* Updated: 2022/08/06 19:41:49 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include <sstream>
#include <iostream>
#include <limits.h>
#include <float.h>
#include <math.h>
#include <iomanip>
void printNan(std::string str)
{
std::cout << "char: impossible" << std::endl;
std::cout << "int: impossible" << std::endl;
if (str == "-inf" || str == "+inf" || str == "nan")
str += "f";
std::cout << "float: " << str << std::endl;
if (str == "-inff" || str == "+inff" || str == "nanf")
str.erase(str.end()-1);
std::cout << "double: " << str << std::endl;
}
void printConversion(double nbr)
{
//char cast
if (nbr <= CHAR_MAX && nbr >= CHAR_MIN && nbr <= 31)
std::cout << "char: Non displayable\n";
else if (nbr < CHAR_MAX && nbr > CHAR_MIN)
std::cout << "char: " << static_cast<char>(nbr) << std::endl;
else
std::cout << "char: impossible\n";
//int cast
if (nbr <= INT_MAX && nbr >= INT_MIN)
std::cout << "int: " << static_cast<int>(nbr) << std::endl;
else
std::cout << "int: impossible\n";
//float cast
if (nbr <= FLT_MAX && nbr >= -FLT_MAX)
{
std::cout << "float: " << static_cast<float>(nbr);
if (nbr - static_cast<int>(nbr) == 0.0)
std::cout << ".0";
std::cout << "f" << std::endl;
}
else
std::cout << "float: impossible\n";
//double cast
std::cout << "double: " << static_cast<double>(nbr);
if (nbr - static_cast<int>(nbr) == 0.0)
std::cout << ".0";
std::cout << std::endl;
}
int main(int ac, char **av)
{
double nbr;
std::stringstream ss;
std::string nbrStr;
if (ac != 2)
{
std::cout << "Wrong number of arguments\n";
return (0);
}
nbrStr = av[1];
if (nbrStr == "-inf" || nbrStr == "+inf" || nbrStr == "nan" || nbrStr == "-inff" || nbrStr == "+inff" || nbrStr == "nanf")
{
printNan(nbrStr);
return (0);
}
ss << nbrStr;
ss >> nbr;
if(ss.fail())
{
std::cout << "Bad entry ! Try to insert a good number\n";
return (0);
}
printConversion(nbr);
}