我需要帮助调试我的代码。所以我创建了一个添加和减去数字的程序,但是当我实现一个do-while循环来重放程序时,实际程序关闭并且不执行do-while循环并且不重放程序。我的代码有问题吗?
P.S。我也在使用codeblocks IDE
#include <iostream>
using namespace std;
int main()
{
// Addition and Subtraction Calculator
int a_number, number1, number2, sum, number3, number4, subsum, again;
// subsum = subtracted sum
// number1 and number2 are variables that hold the users input for addition
// number3 and number4 are variables that hold the users input for subtraction
do
{
cout << "Addition & Subtraction Calculator" << endl;
cout << "-------------------------------------------" << endl;
cout << "1. Addition" << endl;
cout << "2. Subtraction" << endl;
cout << "Please enter a number [1 or 2]" << endl;
cin >> a_number;
while (a_number < 1 || a_number > 2)
{
cout << "Please enter either 1 or 2" << endl;
cin >> a_number;
}
switch (a_number)
{
case 1:
cout << "Please enter a number" << endl;
cin >> number1;
cout << "Please enter another number" << endl;
cin >> number2;
sum = (number1 + number2);
cout << "The sum is " << sum << endl;
break;
case 2:
cout << "Please enter a number" << endl;
cin >> number3;
cout << "Please enter another number" << endl;
cin >> number4;
subsum = (number3 - number4);
cout << "The answer to the subtraction problem is: " << subsum << endl;
break;
}
cout << "Do you want to try again? [y/n]" << endl;
cin >> again;
}
while (again == 'y' || again == 'n');
return 0;
}
答案 0 :(得分:1)
行。因此OP使用int
,他们应该使用char
。这涵盖了当前的问题。 int again
应为char again
。
但其他答案错过了重要的一点。
int again;
cin >> again;
用户输入将根据again
的要求转换为整数。输入y或n无法转换为整数,因为y和n都不是数字且无法转换。 again
保持不变,保持发生的任何垃圾值都位于内存中的那个位置,可能实际上是ay或n ,但更重要的是cin
现在出错了在继续之前需要清除的状态。
cin
会通知OP。所以让我们测试一下。
int again;
if (cin >> again)
{
// got good input. Do something with it.
}
else
{
// got bad input.
cin.clear();
// that bad input is still in the buffer and needs to be removed
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
// the above line will wipe out everything to the end of the stream or
// end of line, whichever comes first.
}
为什么这很重要:因为OP正在使用cin
进行大量数字输入,并且没有检查其是否有效。例如:
cout << "Please enter a number [1 or 2]" << endl;
cin >> a_number;
程序完全被破坏,如果用户键入除数字之外的任何内容,则无法在没有终止信号的情况下退出。
始终检查错误状态并返回代码。他们随时为您提供帮助。在使用之前始终验证用户输入。用户是邪恶的,将试图打破你的程序。不要让他们。
答案 1 :(得分:0)
使用char again;
代替int again;
again
中的为int
,而(again == 'y' || again == 'n')
中的again
(int
}与char
进行比较,没有意义
答案 2 :(得分:0)
您需要将again变量更改为char数据类型,因为您需要存储文本。像这样:
char again;
您还需要将while语句更改为:
while(again != "n");
或者
while(again == "y");