我的程序执行循环正确的#次,但我看不到字符串变量?

时间:2016-10-05 03:06:23

标签: c++

由于程序执行循环的次数正确,我们知道除法正在工作,但是我似乎无法获得字符串变量"结果中的任何内容的输出。"有什么帮助吗?

#include <iostream>
#include <string>

using namespace std;

int main ()
{
  int base,decimal,remainder;
  string result;


  cout <<"Welcome to the Base Converter.  Please enter in the requested        base from 2-16"<<endl;
  cout <<"and an integer greater than or equal to zero and this will     convert to the new base."<<endl
  do
  {
    cout <<"Please enter the requested base from 2-16:"<<endl;
    cin >>base;
    }while (base<2 || base>16);
  do
  {
    cout <<"Please enter the requested integer to convert from base  10:"<<endl;
    cin >>decimal;
    }while (decimal<0);

  do
  {
    decimal=decimal/base;
    remainder=decimal%base;
    if (remainder<=9)
    {
      string remainder;
      result=remainder+result;
     }
    else
    {
      switch(remainder)
      {
        case 10:
          {
            result="A"+result;
            }

我的交换机还有一些案例,但我认为问题出在我的变量声明或我的字符串类中。任何明显的解决方案?

1 个答案:

答案 0 :(得分:1)

您发布的代码不完整,如果没有看到其他功能,我无法确定这是否是正确的解决方案。但是,您在已发布的代码段中修改result变量的方式显然不正确。

当您声明一个与给定上下文中的另一个变量同名的局部变量时,它会隐藏先前声明的变量。所以,如果你写

int remainder = 0;
std::string result = "";
if (remainder<=9)
{
    std::string remainder; //this hides the outer-scope remainder variable for this code block
    result=remainder+result;
}

它和你写的一样

result = "" + result;

这显然是无操作。

要将remainder值添加到字符串之前,您应该这样做:

if (remainder<=9)
{
    std::string remainder_str = std::to_string(remainder); //note different name and initialization value
    result = remainder_str + result;
}

或只是

result = std::to_string(remainder) + result;

请注意,to_string自标题<string>中的C ++ 11起可用。如果您无法使用C + 11,则可以使用itoa代替。