我有一个简单的程序,将十进制数转换为二进制数。我运行程序时没有出现错误,但我确实得到了一个问号。我应该得到一组像“00101”这样的值我试图使用一个返回字符串的函数。这是我的代码,
#include <iostream>
using namespace std;
#include <string>
string convert(int num)
{
string binary;
int remainder;
while (num !=0 )
{
remainder = num % 2;
num = num / 2;
binary = remainder;
}
return binary;
}
int main()
{
int number;
string binaryNum;
cout << "Enter a Number:";
cin >> number;
binaryNum = convert(number);
cout << "This is your number in binary form:" << binaryNum << endl;
system("pause");
}
有任何想法吗?谢谢您的帮助
这段代码有几个问题。首先,您使用binary
行上的=
符号指定字符串binary = remainder
。您可能想写的是binary += remainder
,将余数附加到字符串。
第二个问题也在那条线上。 string::operator=
和string::operator+=
都有超载,需要一个char。传入int时会调用这些重载。因此字符串被设置为ascii值为0或1的字符,因此是问号字符,这不是您要查找的字符。您可以使用std::to_string
轻松将int
转换为字符串。或者,如果您需要对格式进行任何级别的控制,可以像在std::ostringstream
中一样使用this answer。
换句话说,将binary = remainder;
改为binary += std::to_string(remainder)
。
第三个问题:while
循环中有一个return语句。无论num
有多大,函数都会在循环一次迭代后返回。删除那个return语句,因此convert
函数的最后只有一个。
您的代码存在基本问题。当您返回值时,while循环将只迭代一次。您应该每次使用余数连接binaryValue,并将其返回到循环外部。我没有检查逻辑,所以检查它。