使用字母的浮点值进行比较?

Using a letter's float value to compare?

本文关键字:比较      更新时间:2023-10-16

>假设我正在向浮点数输入数字,并希望在输入 q 时退出循环。我想我可以检查输入"q"时分配的值,然后在循环中进行比较,但浮点数似乎有点不精确,所以这确实有效:

int main() {
float input;
bool exit = true;
do{
cin >> input;
if (input == -1.07974e+08) {
exit=false;
continue;
}
input = 0;
} while (exit);

我能想到的唯一方法(例如,在输入数字时检查字母(是将每个输入保存为字符串,比较它,并在每次我需要处理它们时使用类似 atof(( 的东西。但是,当字母应该是例外时,为每个输入运行解析器似乎非常低效。

有什么想法吗?

如果你确定你只有一个角色需要担心,你可以使用peek()来查看下一个角色,而无需实际使用它:

if(cin.peek() == 'q')
{
exit=false;
continue;
}

如果它比这更复杂,那么你必须首先读取一个字符串,然后解析它。

不要忘记,读取浮点数已经涉及解析它,因此主要区别在于将中间复制到字符串中,这应该不会太糟糕,因为您可能没有复制很多字符。另外,如果每次都重用相同的字符串实例,则其缓冲区也将重用。

哦,另外,您可以使用方便的小函数std::stof将字符串解析为浮点数。

我认为你可以这样做:

int main() {
float input;
char end = 'y';
bool exit = true;
do{
cin >> input;
cout << "Do you want to continue? y/n ";
cin >> end;
if (end == 'n') exit = false;
input = 0;
} while (exit);
}