C ++问号输出

问题描述 投票:1回答:2

我有一个简单的程序,将十进制数转换为二进制数。我运行程序时没有出现错误,但我确实得到了一个问号。我应该得到一组像“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");
}

有任何想法吗?谢谢您的帮助

c++ string binary output
2个回答
3
投票

这段代码有几个问题。首先,您使用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函数的最后只有一个。


-1
投票

您的代码存在基本问题。当您返回值时,while循环将只迭代一次。您应该每次使用余数连接binaryValue,并将其返回到循环外部。我没有检查逻辑,所以检查它。

© www.soinside.com 2019 - 2024. All rights reserved.