gpt4 book ai didi

c++ - "Principles and Practice Using C++"第6.3.1章代码错误?

转载 作者:搜寻专家 更新时间:2023-10-31 01:09:32 27 4
gpt4 key购买 nike

我正在学习 使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com