C ++问号输出

时间:2017-09-11 03:23:43

标签: c++ string binary output

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

有什么想法吗? 谢谢你的帮助

2 个答案:

答案 0 :(得分:3)

此代码存在一些问题。首先,您使用行binary上的=符号分配字符串binary = remainder。你可能想写的是binary += remainder,将余数附加到字符串中。

第二个问题也在那条线上。 string::operator=string::operator+=都有重载的问题。传入int时会调用这些重载。因此字符串被设置为ascii值为0或1的字符,因此是问号字符,这不是您要查找的字符。您可以使用std::to_string轻松将int转换为字符串。或者,如果您需要对格式设置进行任何级别的控制,则可以使用this answer中的std::ostringstream

换句话说,将binary = remainder;更改为binary += std::to_string(remainder)

第三个问题:while循环中有一个return语句。无论num有多大,函数都会在循环一次迭代后返回。删除该return语句,因此convert函数的最后只有一个。

答案 1 :(得分:-1)

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