Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在尝试打破while循环时陷入无限循环_C++_Function_Loops - Fatal编程技术网

C++ 在尝试打破while循环时陷入无限循环

C++ 在尝试打破while循环时陷入无限循环,c++,function,loops,C++,Function,Loops,因此,我正在制作一个带有主菜单的计算器,我希望操作继续,直到用户按下$,然后返回主菜单。当我测试它时,它将我的代码抛出到一个无限循环中。我做错了什么?下面是一个函数的片段。(菜单被声明为无效) float生成和(float num1,float num2){ 浮点数r=0; 布尔结束=假; 做{ coutnum1; 如果(num1='$'){ 结束=真; } coutnum2; 如果(num2='$'){ 结束=真; r=num1+num2; cout这肯定行不通。当你说: float num2

因此,我正在制作一个带有主菜单的计算器,我希望操作继续,直到用户按下$,然后返回主菜单。当我测试它时,它将我的代码抛出到一个无限循环中。我做错了什么?下面是一个函数的片段。(菜单被声明为无效)

float生成和(float num1,float num2){
浮点数r=0;
布尔结束=假;
做{
coutnum1;
如果(num1='$'){
结束=真;
}
coutnum2;
如果(num2='$'){
结束=真;
r=num1+num2;

cout这肯定行不通。当你说:

float num2;
后来:

cin >> num2;
然后只从输入流中读取浮点数。一种解决方法是在循环中:

string input;
...
cin >> input;
if (input == "$") break;
istringstream s(input);
float num;
s >> num; // now you read a float from the string

另一件事是,正如我在上面的代码片段中所示,使用
break
打破循环更容易,而不是使用布尔标志并检查它。

这肯定行不通。当你说:

float num2;
后来:

cin >> num2;
然后只从输入流中读取浮点数。一种解决方法是在循环中:

string input;
...
cin >> input;
if (input == "$") break;
istringstream s(input);
float num;
s >> num; // now you read a float from the string

另一件事是,正如我在上面的代码片段中所示,使用
break
打破循环更容易,而不是使用布尔标志并检查它。

您显示的函数不应该构建,它缺少一个右括号
}
。在什么情况下,您希望从用户读取的
float
类型的值测试为等于
'$'
?如果用户输入
$
,这当然不是问题,因为流式处理操作员不知道如何将其转换为浮点值。如果您的实现使用ASCII字符集(或与之兼容的函数),输入值
36
将导致循环结束,因为
36
'$'
的整数值。您显示的函数不应生成,它缺少一个右括号
}
。在什么情况下,您希望从用户读取的
float
类型的值测试为等于
'$'
?如果用户输入
$
,这当然不是问题,因为流式处理操作员不知道如何将其转换为浮点值。如果您的实现使用ASCII字符集(或与之兼容的值),输入值
36
将导致循环结束,因为
36
'$'
的整数值。此外,您应该始终测试cin的状态,因为如果它失败,您将有您不想要的输入,因此您的检查将失败(大部分时间).
float num=std::stof(输入)
比使用
istringstream更容易阅读。@kevr还有很多需要改进的地方,我试图回答这个问题。这里有大量关于Stackoverflow和其他地方的代码示例。该函数可以很容易地用于错误检查。是的,您仍然应该针对
“$”
首先。是的,这是正确的。这就是为什么检查
“$”
仍然应该首先进行的原因。此外,您应该始终测试cin的状态,因为如果它失败,您将有您不想要的输入,因此您的检查将失败(大多数情况下)。
float num=std::stof(输入)
比使用
istringstream更容易阅读。@kevr还有很多需要改进的地方,我试图回答目前的问题。这里有大量关于Stackoverflow和其他地方的代码示例。该函数可以非常容易地用于错误检查。是的,您仍然应该针对
进行明确的检查。”$“
首先。是的,这是正确的。这就是为什么仍应首先检查
“$”