您如何专门获得一个浮点数为 2 位小数的输入作为 C++ 中 while 循环的条件?
Posted
技术标签:
【中文标题】您如何专门获得一个浮点数为 2 位小数的输入作为 C++ 中 while 循环的条件?【英文标题】:How do you exclusively get an input that is 2 decimal places for a float as a condition for a while loop in C++? 【发布时间】:2021-08-19 03:14:14 【问题描述】:我正在制作一个要求输入时间的程序。如果我希望float
输入采用这种格式,9.24
将被视为09:24
。如何编写只允许这种输入的 while 循环?我是 C++ 编程的新手,所以如果你能帮我把它简化一下,那就太好了。这是我到目前为止的while循环:
浮动时间; cout
while (cin >> time)
if ((time < 12.00) && (time > 0.00))
break;
else
cout << "Invalid input, please enter a valid time: ";
在这个循环之后,它会询问时间是上午还是下午,但这与此无关。
【问题讨论】:
我认为您根本不想为此使用浮点数。例如,由于底层的二进制表示,C++ 不能将9.24
完全表示为浮点数——它实际上存储了类似于9.2399997711181641
的东西,它只是非常接近它。我建议尝试将时间读取为 作为字符串 并问自己“可以算作有效输入的字符串的特征是什么?”
您要求输入非通用格式是在自找麻烦。在小时和分钟之间使用小数点对人们来说是完全陌生的,他们会想要使用冒号。
@MarkRansom 小时和分钟之间的小数点是这个porgram的要求,所以我不能使用冒号,很遗憾。
我不清楚您是否希望用户输入“9:24”、“09:24”、“9.24”或“09:24 = 9.24”。
仅仅因为输入看起来像一个浮点数,就没有理由把它读成浮点数。例如将其读取为字符串,然后使用正则表达式对其进行解析并从中获取两个整数。 (Ab)使用浮动迟早会结束。
【参考方案1】:
我写了一个简单的代码,里面有对你有用的解释。
#include<iostream>
#include <string>
int main()
int hour, minute;
std::string time; // we will read the time as string
std::string delimiter = ":"; // we will split from this character
size_t pos = 0;
std::cout << "Please enter the time: (example=>09:24) ";
while (std::cin >> time)
while ((pos = time.find(delimiter)) != std::string::npos)
hour = std::stoi(time); // we converted the hour information to integer
time.erase(0, pos + delimiter.length());
minute = std::stoi(time); // we converted the minute information to integer
if ((hour >= 0 && hour <= 12) && (minute >= 0 && minute < 60)) //necessary checks are made
break;
else
std::cout << "Invalid input, please enter a valid time: ";
std::string AmPm;
std::cout << "AM or PM ?";
while (std::cin >> AmPm) //We get the AM/PM information from the user as a string
if (AmPm =="AM" || AmPm=="PM") //necessary checks are made
break;
else
std::cout << "Invalid input,please enter AM or PM ";
std::cout << "Time is " << hour << ":" << minute <<" " <<AmPm;
如果你输入9:24和AM作为测试数据,你会得到如下输出作为输出;
输出 => 时间是上午 9:24
如果您愿意,您可以测试代码中分隔符条目的正确性。
注意:using namespace std;
=>> 这不是好的编码习惯。
祝你好运。
【讨论】:
以上是关于您如何专门获得一个浮点数为 2 位小数的输入作为 C++ 中 while 循环的条件?的主要内容,如果未能解决你的问题,请参考以下文章