【问题标题】:INTtoCHAR function couts wrong valueINT to CHAR 函数计数错误值
【发布时间】:2015-05-30 12:41:58
【问题描述】:

这是我的函数的样子:

signed char INTtoCHAR(int INT)
{
    signed char CHAR = (signed char)INT;
    return CHAR;
}

int CHARtoINT(signed char CHAR)
{
    int INT = (int)CHAR;
    return INT;
}

它将 int 值分配给 char 可以正常工作,但是当我想计算该 char 时,它会给我一些奇怪的迹象。它编译没有错误。

我的测试代码是:

int main()
{
  int x = 5;
  signed char after;
  char compare = '5';
  after = INTtoCHAR(5);

  if(after == 5)
  {
      std::cout << "after:" << after << "/ compare: " << compare << std::endl;
  }


  return 0;
}

After 确实是 5,但它不打印 5。有什么想法吗?

【问题讨论】:

  • 能否请您添加错误的输出?
  • 是垃圾输出@Mikael。但是,有了我的回答,你就会得到号码。
  • @Somebody,你能确认我的回答是正确的吗? :)
  • @Somebody,你问了一些想法,你得到了 2 个,你愿意谈谈他们吗? :)

标签: c++


【解决方案1】:

使用一元运算符+ 添加到上述答案,还有另一种方法:typecasting

std::cout << "after:" << (int)after << "/ compare: " << compare << std::endl;

Correct output

【讨论】:

  • 我怎么没想到呢?不错的答案 karma_geek! +1
  • @gsamaras:我也为你的答案 +1,因为我不知道一元运算符方法。也谢谢你:)
  • 感谢极客,也不错的最佳答案! ;)
【解决方案2】:

打印时使用+after,而不是after。这会将after 提升为可打印为数字的类型,无论类型如何。

所以改变这个:

std::cout &lt;&lt; "after:" &lt;&lt; after &lt;&lt; ", compare: " &lt;&lt; compare &lt;&lt; std::endl;

到这里:

std::cout &lt;&lt; "after:" &lt;&lt; +after &lt;&lt; ", compare: " &lt;&lt; compare &lt;&lt; std::endl;

有关更多信息,请参阅此answer

【讨论】:

    猜你喜欢
    • 2016-03-26
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2020-07-14
    • 2015-01-15
    相关资源
    最近更新 更多