c++语法错误:程序以非零状态退出
C++ Syntax Error: Program Exited With Non-Zero Status
我使用的是repl。来写我的c++。到目前为止,我已经学习了条件、循环和函数。现在我要写一个程序,输入两个整数找出最小公倍数和最大公分母。到目前为止,我已经写了大部分的代码,但是有一个问题。
"已退出非零状态"
#include <iostream>
using namespace std;
int main()
{
int number1 = 0;
int number2 = 0;
int calc = 0;
int lcm = 0;
cout << "Give me two integers, and I will calculate the Least Common Multiple and the Greatest Common Divisor." << endl;
while (number1 <= 0) {
cout << "Enter your first number. Cant be negative" << endl;
cin >> number1; }
while (number2 <= 0) {
cout << "Enter your second number. Cant be negative" << endl;
cin >> number2; }
while(number2 != 0) { ///Greatest Common Divisor
calc = number1 % number2;
lcm = (number1*number2) / calc;
number1 = number2;
number2 = calc;
}
cout << "Least Common Multiple is " << lcm << endl;
cout << "Greatest Common divisor is " << number1 << endl;
}
所以我不确定这是语法错误还是因为repl。但我真的很想弄清楚这件事。
谢谢
While循环在循环结束时检查number2的值,但是当您计算calc时,有时该值为零,然后在下一步程序以除零异常退出。您可以通过在计算calc变量后将这一行添加到代码中来防止此问题:
if (calc == 0 ) break;
另外,你的代码不能正常工作,例如设置number1 = 30和number2 = 18!
先用二进制法计算GCD,再用GCD计算LCM。
#include <iostream>
#include <math.h> // for pow(2,d)
using namespace std;
int main()
{
int gcd, lcm, a, b, g, number1 = 0, number2 = 0, d=0;
cout << "Give me two integers, and I will calculate the Greatest Common Divisor and the Least Common Multiple." << endl;
while (number1 <= 0) {
cout << "Enter your first number. Cant be negative" << endl;
cin >> number1;
}
// using binary method to calculating GCD: https://en.wikipedia.org/wiki/Greatest_common_divisor
while (number2 <= 0) {
cout << "Enter your second number. Cant be negative" << endl;
cin >> number2;
}
a = number1;
b = number2;
while (((a%2)==0) && ((b%2)==0)) {
a = a/2;
b = b/2;
d = d+1;
}
while (a != b) {
if ((a%2) == 0) {
a = a/2;
} else if ((b%2)==0) {
b = b/2;
} else if (a>b) {
a = (a-b) /2;
} else {
b = (b-a)/2;
}
}
g = a;
cout << "ng: " << g << "td: " << d << "tpower(2,d): " << pow(2,d);
gcd = g * pow(2,d); // power(2,d) with math.h library
lcm = (number1*number2)/gcd; // according to LCM(a,b) = (a*b)/GCD(a,b)
cout << "nGreatest Common Divisor is " << gcd << " and Least Common Multiple is " << lcm << endl;
}
首先,您需要检查哪个数字更大,因为如果您设置number1=18
和number2=30
,那么number1%number2
将是18,然后您看到它的去向-错误的输出。此外,Hossein Nazari建议的修复可以很好地避免异常,但是如果遵循该修复,您的GCD将存储在number2
中。例如30和18:
30%18 = 12
calc = 12
if(calc==0) break;
(lcm routine)
number1 = 18
number2 = 12
18%12 = 6
calc=6
if(calc==0) break;
(lcm routine)
number1 = 12
number2 = 6
12%6=0
calc=0
if(calc==0) break;
<done>
我宁愿完全从循环中删除lcm计算,在这种情况下,您将按计划在number1
中获得GCD,然后只需通过公式(number1*number2)/GCD
计算lcm,即30*18/6 = 90;
我来修改一下数据类型
float calc = 0;
float lcm = 0;
嗨@Cheers和hth,我已经在这里执行了代码https://www.tutorialspoint.com/compile_cpp11_online.php,并得到了这个异常-浮点异常,在我将数据类型从int改为float之后,我得到了这个值输入你的第一个号码。不能为负
10
输入第二个号码。不能为负
20
最小公倍数是inf
最大公约数是10
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 试图在崇高中奔跑. 错误 已发生: 收集2.exe: 错误: ld 返回 1 退出状态
- collect2:错误:ld 返回 1 个退出状态未定义的引用
- C++ collect2:错误:ld 返回 1 退出状态
- 找不到 -llibmysqld Collect2.exe:错误:ld 返回 1 退出状态
- 每次我要使用外部资源时,我都会得到:collect2。exe:错误 ld 返回 1 退出状态
- 当出现错误ld return 1退出状态时,如何编译程序
- 无法访问 Arduino 结构字段。错误"退出状态 1。xxxx 不命名类型"
- "Extern"对象问题:错误:Id 返回 1 个退出状态
- c++ (C::B) 错误:ld 返回 1 个退出状态
- 在 c++ 中捕获 shell 脚本退出状态
- 对"displayForStudent(int, int const*, double const*, int)"的未定义引用 collect2.exe:错误:ld 返回 1 个退出状态
- 使用类[错误] LD返回1退出状态
- C++从函数返回的 2D 数组,错误:以非零状态退出
- 随机密码生成器的C++循环错误"以非零状态退出"
- Boost.MSM:通过连接伪状态退出正交区域
- c++语法错误:程序以非零状态退出