所以基本上我想让它停止重复。如果我正确输入数字,则可以正常工作。如果我输入不允许的负数并且需要try-catch异常,它将不断重复,并且不会停止询问数字。 我所拥有的只是该代码的源文件,我正在尝试为main创建一个函数。
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
void gcd(int x, int y);
int main()
{
int x;
int y;
cout << "Please enter two integer values" << endl;
cin >> x;
cin >> y;
gcd(x, y);
return 0;
}
void gcd(int x, int y)
{
int gcd;
int s = 0;
while (s == 0)
{
try
{
if (x < 0 || y < 0)
throw 1;
else
{
s == 1;
break;
}
}
catch (int x)
{
cout << "Wrong negative input please type in two Positive integers" << endl;
cin >> x >> y;
continue;
}
}
for (int i = 1; i <= x && i <= y; i++)
{
if (x % i == 0 && y % i == 0)
gcd = i;
}
cout << "The gcd of x: " << x << " and y: " << y << " is: " << gcd << endl;
}
答案 0 :(得分:1)
如果您不希望使用负值调用函数gcd()
,请抛出std::invalid_argument
异常。 gcd()
的业务不是请求用户输入。调用main()
之前,请验证gcd()
中的输入。
#include <limits>
#include <stdexcept>
#include <iostream>
int gcd(int, int);
int main()
{
int x, y;
while (std::cout << "Please enter two positive integers: ",
!(std::cin >> x >> y) || x < 0 || y < 0)
{
std::cerr << "Input error :(\n\n";
if (std::cin.fail()) {
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
std::cout << "The gcd of x: " << x << " and y: " << y << " is: " << gcd(x, y) << "\n\n";
}
int gcd(int x, int y)
{
if (x < 0 || y < 0)
throw std::invalid_argument("No negative arguments to gcd(), please :(");
return y == 0 ? x : gcd(y, x % y);
}
答案 1 :(得分:0)
您可以(也许应该)从gcd
函数中删除逻辑,而是将其放在您从用户那里得到输入的地方,即main
中。另外,请预先说明要求。例如:
int main()
{
int x;
int y;
cout << "Please enter two positive integer values" << endl;
cin >> x;
cin >> y;
if (x < 0 || y < 0)
{
cout << "Wrong negative input please type in two Positive integers" << endl;
return 0;
}
gcd(x, y);
return 0;
}
现在,您可以在gcd
中放置断言以强制没有负值进入:
void gcd(int x, int y)
{
assert(x >= 0);
assert(y >= 0);
// ...
}