所以我正在编写这个程序,它接受一个输入并尝试将输入加1,如果它是偶数,或者将它乘以3然后再加1.当我尝试时,它会给我这个错误编译它:
bigbeno37@vm-0:~/GitHub2$ g++ NumberGenerator1.cpp
NumberGenerator1.cpp:1:2: warning: #import is a deprecated GCC extension [-Wdeprecated]
NumberGenerator1.cpp: In function ‘int main()’:
NumberGenerator1.cpp:13:5: error: ‘inputNumberClone’ was not declared in this scope
NumberGenerator1.cpp:16:26: error: invalid operands of types ‘double’ and ‘int’ to binary ‘operator%’
NumberGenerator1.cpp:19:26: error: cannot convert ‘int(int (*)(void*), void*, int, void*, ...)throw ()’ to ‘double’ in assignment
NumberGenerator1.cpp:24:26: error: cannot convert ‘int(int (*)(void*), void*, int, void*, ...)throw ()’ to ‘double’ in assignment
这是我的代码
#import <iostream>
using namespace std;
int main(){
cout << "Please enter a number: " << endl;
double inputNumber = 0;
double inputerNumberClone = 0;
double stepsClone = 0;
cin >> inputNumber;
inputNumberClone = inputNumber;
for(double steps = 0; inputNumber != 1; steps++){
if(inputNumber % 2 == 0){
inputNumber = inputNumber / 2;
stepsClone = clone;
}else{
inputNumber = inputNumber * 3;
inputNumber++;
stepsClone = clone;
}
}
cout << "It takes " << stepsClone << " to get to 1 from " << inputNumberClone << endl;
return 0;
}
有人能帮助我吗?
答案 0 :(得分:4)
#include
不是#import
。inputerNumberClone
而不是inputNumberClone
。fmod
代替double
而不是%
。答案 1 :(得分:4)
#include
代替#import
inputerNumberClone
而不是inputNumberClone
和steps
而不是clone
您将获得一个整数作为输入。然后,如果它是偶数,则将其除以2
,因此结果也是整数。
如果您没有输入整数作为输入思考,那么意味着1.5 % 2
。
Double作为符号,指数和分数存储在内存中,并不是100%精确。因此,您可以2
取代1.99...9
,而不是{{1}}。
答案 2 :(得分:3)
双打不能用于operator%
,只能使用。{/ p>
答案 3 :(得分:3)
这是一个错字:
double inputerNumberClone = 0;
应为inputNumberClone
。
另一个问题是模运算不能应用于双精度。它需要整体类型。
因此,您可以将值从double
更改为int
,也可以使用std::fmod
功能。
if(std::fmod(inputNumber, 2) == 0) {
}
另一个错误在这里:
stepsClone = clone;
什么是克隆?
答案 4 :(得分:2)
首先看一下inputerNumberClone的拼写。
答案 5 :(得分:1)
NumberGenerator1.cpp:13:5: error: ‘inputNumberClone’ was not declared in this scope
你在声明中输了一个拼写错误,并且不知道“inputNumberClone”是什么。
NumberGenerator1.cpp:16:26: error: invalid operands of types ‘double’ and ‘int’ to binary ‘operator%’
你试图在双精度上使用模运算,而它只允许在c ++中使用整数。 math.h中可能有一个函数(可能是rem
或类似其余的东西),可以完成你想要的任务。 %运算符是一个特殊的东西,因为它是整数的指令,但它是双精度(在逻辑上是一个函数)的双精度(在C的设计时)。
NumberGenerator1.cpp:19:26: error: cannot convert ‘int(int (*)(void*), void*, int, void*, ...)throw ()’ to ‘double’ in assignment
NumberGenerator1.cpp:24:26: error: cannot convert ‘int(int (*)(void*), void*, int, void*, ...)throw ()’ to ‘double’ in assignment
您可以从名为clone
的Linux头文件中获取一个函数。它认为你想在这里使用这个功能。重命名为变量steps
,以避免与函数和此错误发生冲突。