说我正在将数字输入浮点数,并想在输入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()的方法跟他们。但是当字母被认为是一个例外时,为每个输入运行解析器似乎效率很低。
有什么想法吗?
答案 0 :(得分:2)
如果您确定只需要担心一个字符,则可以使用peek()
来查看下一个字符,而无需实际消耗它:
if(cin.peek() == 'q')
{
exit=false;
continue;
}
如果它比这更复杂,那么您必须首先读取一个字符串,然后解析它。
不要忘记,读取浮点数已经涉及到对其的解析,因此主要区别在于将中间副本转换为字符串,这应该不会太糟,因为您可能不会复制很多字符。另外,如果您每次都重复使用相同的字符串实例,则其缓冲区也将被重复使用。
哦,同样,您可以使用方便的小功能std::stof
将字符串解析为浮点数。
答案 1 :(得分:0)
我认为您可以这样做:
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);
}