【问题标题】:How do a compare a char to a number? C++如何将字符与数字进行比较? C++
【发布时间】:2017-12-13 12:01:49
【问题描述】:

在我当前的程序中,我让用户输入了一个存储在字符列表中的数字。之后,我浏览列表并尝试将该数字分配给一个 int 变量。那就是我遇到错误的地方。这是我的代码的摘录。

        if (list1[j]=='1');
            z=1;
        if (list1[j]=='2');
            z=2;
        if (list1[j]=='3');
            z=3;
        if (list1[j]=='4');
            z=4;

问题是即使 list[j]=3,z 也总是变为 4。我知道我在比较时犯了一个错误,但我一直找不到它。非常感谢您的帮助。

这就是我定义列表的方式:

    char list1[32];

我就是这样填的:

    for(int i=0;i<(2*c);i+=2)
{
    cin>>list1[i]>>list1[i+1];
}

【问题讨论】:

  • 从 if 语句中删除分号。
  • 关闭括号后删除分号:if (list1[j]=='1') /* no semicolon here */
  • 是的,我的错。然而,它现在所做的是它总是认为数字是 1 而不是 4

标签: c++ arrays list if-statement char


【解决方案1】:

您可以用单个数学行替换您的 if 语句:

z = list1[j] - '0';

这适用于大多数编码。

注意:以上语句仅适用于单个数字字符。

编辑 1:switchif
如果您坚持比较,我相信switch 会更具可读性:

switch (list[j])
{
  case '1': z = 1; break;
  case '2': z = 2; break;
  case '3': z = 3; break;
  // ...
}

上面的单一语句仍然更少的代码,更少的缺陷机会。

【讨论】:

  • 我现在就试试!
  • 刚刚尝试了这两个建议 - 它们都有效。我从不喜欢 switch,但它在这样的场景中显然非常有效。非常感谢您的帮助,一旦 stackoverflow 允许,我将接受答案。
【解决方案2】:

您需要做的就是从 if 语句中删除分号。如果在每个 if 语句后包含分号,则 if 语句中的代码块将不会执行。它应该是这样的:

if (list1[j]=='1')
    z=1;
if (list1[j]=='2')
    z=2;
if (list1[j]=='3')
    z=3;
if (list1[j]=='4')
    z=4;

【讨论】:

  • 我做到了,它只是将问题更改为始终让 z 等于 1。不过感谢您的帮助。
  • 我下面的答案实际上应该可以解决您的问题。我建议你试一试(:
猜你喜欢
  • 2016-10-17
  • 2020-07-01
  • 2015-10-03
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 2020-04-15
相关资源
最近更新 更多