为什么我的 while 循环对于特定输入中断,而对于其他输入工作正常?
Why is my while-loop breaking for specific inputs and works fine for other inputs?
我是编程新手,我正在使用"Bjarne Stroustrup"的"编程:使用C++原理和实践(第二版("一书。我被告知在第6章中尝试编写一个简单的计算器程序。
我能够执行"+"和"-"的许多操作,但是当程序读取"*"或"/"时,它会中断while循环,对于我的一生,我无法理解为什么。
我要求用户输入一个表达式,在表达式结束时,他们必须输入"X"。
operation
是存储+
、-
、*
、/
的字符,double_in
是修改双modified
的双精度,最后modified
将是输出。
这是我的代码:
double modified{ 0 }, double_in{ 0 };
char operation{ 0 };
cout << "Expression with 'X' at the end :n";
cin >> modified;
cout << modified << "n";
while (cin >> operation)
{
while (cin >> double_in)
{
if (operation == 'X')
{
break;
}
else if (operation == '+')
{
modified += double_in;
cout << modified << "n";
}
else if (operation == '-')
{
modified -= double_in;
cout << modified << "n";
}
else if (operation == '*')
{
modified *= double_in;
cout << modified << "n";
}
else if (operation == '/')
{
if (double_in == 0)
{
throw zero_div{};
}
modified /= double_in;
cout << modified << "n";
}
else
{
throw invalid_operation{};
}
}
}
下面是输出的示例:
Expression with 'X' at the end :
10+20-10*2/3X
10
30
20
Answer : 20
如果您要回答,请提前感谢您。非常感谢。
整个if (operation == 'X')
块需要移动到while (cin >> double_in)
循环上方,否则cin >> double_in
到达X
时将失败。
更重要的是,while (cin >> double_in)
需要改为if (cin >> double_in)
,因为每个operation
字符只需要读取 1 个double
值,然后您可以在while (cin >> operation)
循环的下一次迭代中读取新operation
。
你现在循环的方式,一旦你在operation
中读取,你就会读取多个double
值,对所有这些值应用相同的operation
(+20
、-10
等是double
值的有效表示(,直到operator>>
遇到没有-
或+
前缀的double
时失败, 然后你cin
处于一个糟糕的状态,所以它不能再读了。
对于2+3*6X
:
cin >> modified
设置modified
2
- 然后
cin >> operation
operation
设置为'+'
- 然后
cin >> double_in
double_in
设置为3
operation
是'+'
,所以modified
递增3
,变成5
- 则
cin >> double_in
在*
上失败
对于10+20-10*2/3X
:
cin >> modified
设置modified
10
- 然后
cin >> operation
operation
设置为'+'
- 然后
cin >> double_in
double_in
设置为20
operation
是'+'
,所以modified
递增20
,变成30
- 然后
cin >> double_in
double_in
设置为-10
operation
是'+'
,所以modified
递增-10
,变成20
- 然后
cin >> double_in
失败*
试试这个:
double modified, double_in;
char operation;
cout << "Expression with 'X' at the end :n";
if (cin >> modified)
{
while (cin >> operation)
{
if (operation == 'X')
{
break;
}
if (cin >> double_in)
{
if (operation == '+')
{
modified += double_in;
}
else if (operation == '-')
{
modified -= double_in;
}
else if (operation == '*')
{
modified *= double_in;
}
else if (operation == '/')
{
if (double_in == 0.0)
{
throw zero_div{};
}
modified /= double_in;
}
else
{
throw invalid_operation{};
}
cout << modified << "n";
}
else
{
throw invalid_operation{};
}
}
}
else
{
throw invalid_operation{};
}
现场演示
相关文章:
- scanf() 只取数字作为输入,避免使用其他字符
- 视频在唤醒其他线程时输入设备断开连接
- 为什么我的 while 循环对于特定输入中断,而对于其他输入工作正常?
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- 如何定义此"if block"中其他无效输入的值,以便在c ++中将字符串转换为对象?
- 可视C++ - 从链接器>输入>其他依赖项中排除文件
- 与其他输入相比,达到 65535 时的性能大幅跳跃
- 区分键盘记录器中的密码和其他类型的键盘输入
- isdigit() 和 isalnum() 给出错误,因为输入是一个常量字符并且无法转换。其他可能查看输入是否为数字的方法?
- 如何根据用户输入"weighted"随机数生成,使某些数字优先于其他数字?
- Vigenere密码的C++功能有时才起作用(适用于某些输入,跳过其他输入的班次)
- TensorFlow类占位符以及其他定义输入张量的方法
- 如何从用户输入中获取某些值并忽略其他值
- 在一行中输入具有其他输入类型的多个单词字符串
- 其他语言的Qt键盘输入
- 有人可以向我解释一下这段代码是如何工作的吗?(程序在预期数值且用户输入其他输入时再次要求用户输入)
- 如何引用无效的输入,然后重新输入和如果其他语句
- 全球安装的键盘钩可防止键盘输入其他应用程序
- 为什么我不能继续使用 std::cin 向同一变量输入其他值?
- c++ 输入一个数字来确定其他数字,然后比较它们