- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在学习 使用 C++ 的原则和实践
。我对它的理解还算不错,但最近在第 6 章
中遇到了瓶颈。您假设开始编写一个计算器程序,并且随着您继续编写,它的功能会逐渐变得更加丰富。它最终会导致 token ,这让我很困惑。
任何人!我的问题是我正在遵循这段代码,但它没有像解释的那样工作。我已经多次对照这本书检查代码,它看起来很相似。代码只是不断接受 lval 而没有对它做任何事情。在输入 3 个 cin 之后,它只会显示 lval 最初设置的内容。我也不是 100% 确定在 while 循环中使用 cin >> op。是什么让它停下来?它什么时候知道停止?错误功能似乎也不起作用。我一直试图破坏程序,但它没有弹出任何错误消息。
这很令人沮丧,因为我正在学习,没有导师,我很难解决自己的问题:/谢谢大家抽出宝贵时间!传入的代码......这是我目前所拥有的
#include "std_lib_facilities.h"
int main()
{
cout << "Please enter an expression (we can handle ""+"",""-"",""*"",""/"")" << endl;
int lval = 0;
int rval;
char op;
/*int res;*/
cin >> lval; //read left most number
if (!cin) error("No first operand");
while (cin >> op) //Repeatedly read operand and right value
{
cin >> rval;
if (!cin) error("No second operand");
switch(op)
{
case '+':
lval += rval; //add: lval = lval + rval
break;
case '-':
lval -=rval;//subtract: lval = lval - rval
break;
case '*':
lval *= rval; //Multiply: lval = lval * rval
break;
case '/':
lval /= rval; //Divide: lval = lval / rval
break;
default:
cout << "Result: " << lval << endl;
keep_window_open();
return 0;
}
}
error("Bad expression");
}
附言我尝试使用断点来查看如何逐行编写代码,但它开始让我进入 iostream 文件,此时我不知道如何阅读这些文件!
最佳答案
它确实有点工作。例如,如果您引入以下序列:
3 <enter>
+ <enter>
3 <enter>
d <enter>
3 <enter>
它产生:
Result: 6
原因是 cin 总是期望输入结束。逻辑中也存在错误,即使您想停止执行,也必须引入一个额外的虚拟值。要解决此问题,您必须在请求 rval 之前检查运算符。
编辑:
可能这会接近您想要的:
#include "iostream"
#include <cstdio>
using namespace std;
int main()
{
cout << "Please enter an expression (we can handle ""+"",""-"",""*"",""/ "")" << endl;
int lval = 0;
int rval;
char op;
/*int res;*/
cin >> lval; //read left most number
if (!cin) printf("No first operand");
while (cin >> op) //Repeatedly read operand and right value
{
if(op != '+' && op != '-' && op != '*' && op != '/')
{
cout << "Result: " << lval << endl;
//keep_window_open();
getchar();
return 0;
}
cin >> rval;
if (!cin) printf("No second operand");
switch(op)
{
case '+':
lval += rval; //add: lval = lval + rval
break;
case '-':
lval -=rval;//subtract: lval = lval - rval
break;
case '*':
lval *= rval; //Multiply: lval = lval * rval
break;
case '/':
lval /= rval; //Divide: lval = lval / rval
break;
}
}
printf("Bad expression");
}
关于c++ - "Principles and Practice Using C++"第6.3.1章代码错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16924710/
只是向 Stack Overflow 和 Microsoft 开发社区提出关于 OO 软件设计原则(称为 SOLID)的想法和问题。请问里氏替换原则和依赖倒置原则有什么区别?我已经考虑了一段时间,但我
我读过关于 S.O.L.I.D. 的文章。但我看不出 OCP 和 DIP 之间有什么区别。看看这个 OCP 的例子: http://www.oodesign.com/open-close-princi
我正在尝试理解单一职责原则并确定我的系统中可能存在的类。 目前我知道Bob叔叔说的原则,即 避免狡猾的词,如经理、数据、 super 或处理器。我们应该能够在不使用“if”、“and”、“or”和“b
我可以通过封装掌握“做一件事”的部分,Dependency Injection , Principle of Least Knowledge , 和 You Ain't Gonna Need It ;
有人可以解释一下 是做什么的吗?拒绝遗赠 方法? 我尝试阅读一些文章并说它是一种代码异味,或者在 wiki 中它说它是一个类,它覆盖了基类的方法,使得派生类不遵守基类的契约。 但简而言之,或者更简单地
在我正在编写的应用程序中,我有一个策略类。有 4 种不同类型的策略。每个策略都根据其他策略进行加权,例如策略 A > 策略 B > 策略 C > 策略 D。 谁有责任实现确定一项政策是否优于另一项政策
我在看 Bob Martin's principles of OOD, specifically the SRP text ,我非常理解它所说的精神,但我不太明白链接的第 2 页(本书的第 150 页
我正在寻找一些违反单一职责原则的优秀代码示例。不要给我看鲍勃叔叔的书或网站上的任何例子,因为它们在互联网上到处都是,就像这样: interface Modem { public void di
我正在使用原理来存储当前用户 ID, 存储 val principalExtractor: (MutableMap) -> Any? = { params -> val sess
LSP 是 SOLID 中最难正确理解的。 LSP 声明程序中的对象应该可以用它们的子类型的实例替换,而不会改变程序的正确性。 因此,如果我们有这个典型的矩形 - 正方形示例: rect = new
我读了一篇摘要,其中在谈到继承时总是使用“替代原则”的定义。但并没有解释这个原理的含义。 这个原理是什么? 谢谢。 最佳答案 意思很简单:子类必须遵守父类(super class)设定的契约。 如果你
我们都用一些模式编写代码,即使我们没有意识到。我试图真正理解一些 S.O.L.I.D 原则,以及您如何在现实世界中应用这些原则。 我正在为“D”而苦苦挣扎。 我有时会混淆依赖倒置和依赖注入(injec
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 3 年前。 Improve
我最近在很多代码中注意到人们将硬编码的配置(如端口号等)值放在类/方法的深处,使其难以找到,也无法配置。 这是否违反了 SOLID 原则?如果不是,我是否可以向我的团队成员引用另一个“原则”来说明为什
我们正在对我们的系统进行一些重大更改,我想知道实现这些新业务逻辑规则的最佳方式,尊重 SOLID 原则: 开放/封闭原则说“对扩展开放,对修改关闭”好吧,但是我该如何修改呢?我的意思是,我不想保留旧的
如果我有类似的东西 class square : figure {} class triangle : figure {} 这是否意味着我永远不应该使用正方形和三角形类而只能引用图形? 永远不要这样做
关闭。这个问题是 opinion-based 。它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文来回答。 2年前关闭。 Improve t
很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center . 12 年前
我对里氏替换原则的理解是,基类的某些属性是正确的,或者基类的某些实现行为对于派生类也应该是正确的。 我想这意味着当在基类中定义方法时,永远不应该在派生类中重写该方法 - 因为那时替换基类而不是派生类会
过去一两周,在我的计算机科学课上,我们被要求展示如何通过“原则性转换”来简化和缩短函数。我们尚未收到有关这些作业的反馈,因此我不知道我做得是否正确。 这是我最新的练习,以及我对解决方案的尝试: Sho
我是一名优秀的程序员,十分优秀!