【问题标题】:Truncated If Statement C++ (Turning letters to numbers)截断 If 语句 C++(将字母转换为数字)
【发布时间】:2016-07-14 20:23:49
【问题描述】:

我正在尝试使用 C++ 将一系列字母更改为数字,并开始编写此代码。

但是,计算 digit1 变量的数学似乎永远不会被执行。

有什么想法吗?

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int qtyofnumbers, num, digit1, counter;
    char letters, upperlower;

    cout << "Enter a letter: ";
    cin >> letters;

    for (counter = 0; counter < 8; counter++)
    {
        if (counter == 3)
            cout << "-";

        num = static_cast<int>(letters) - static_cast<int>('A');

        if (0 <= num && num < 26)
            digit1 = (num / 3) + 2;

        if (((num / 3 == 6 ) || (num / 3 == 7)) && (num % 3 == 0))
            digit1 = digit1-1;

        if (digit1 > 9)
            digit1 = 9;    

        cin >> letters;
    }

    cout << digit1;

    return 0;
} 

【问题讨论】:

  • 使用{}!!!
  • 请在寻求帮助之前正确缩进您的代码。很难按原样阅读。
  • 你用调试器单步调试代码了吗?
  • @jtbandes,谢谢。应该更有条理..谢谢!
  • 您的前两个ifs 是否涵盖了您的程序可能遇到的num 的所有可能值?如果没有,digit1 将在第三个if 中未初始化地使用,这就是贯穿始终的 UB。我它们涵盖了所有值,但仍然如此。

标签: c++ if-statement statements truncated


【解决方案1】:

我的猜测是问题出在您的输入中。你输入的是大写字母还是小写字母?他们的ASCII codes 是不同的。因此,您可能希望将代码从

num= static_cast<int>(letters)-static_cast<int>('A');

类似

if (num >= 'a')
    num = letters - 'a';
else
    num = letters - 'A';

另外,正如@jtbandes 所述,使用花括号{}。空格不决定 C++ 中的范围。即使它只是在你的 if 语句之后的一行代码,它也会为你省去以后的麻烦。

【讨论】:

    【解决方案2】:

    需要静态转换吗?我建议使用字符串流或仅使用 .at() 逐个字符地遍历字符串,并依靠 ascii 值进行转换。 http://web.cs.mun.ca/~michael/c/ascii-table.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多