【问题标题】:checking if all digits in an array element are 0 or 1 [c++]检查数组元素中的所有数字是 0 还是 1 [c++]
【发布时间】:2021-03-09 03:00:04
【问题描述】:

我需要检查数组中一个元素中的所有数字是否 = 0 或 1。

我有这个功能:

bool checkIfBin(int okt) {
    while (okt > 0)
    {
        int digit = okt % 10;

        if (digit > 1)
            return false;
        okt /= 10;
    }

    return true;
}

调用这个函数看起来像:

for (int j=0; j < 4; j++) {
        cout << "Enter" << j+1 << " octet in binary system: ";
        
        if (checkIfBin(okt[j]) == true)
            cin >> okt[j];
        else
            break;
    }

问题在于 - 当函数返回 false 时,它​​不会阻止程序循环。我已经调试了函数,它似乎工作正常,但我只是在学习,我可能做错了。没有收到任何错误。

不知道问题出在哪里

【问题讨论】:

  • 检查一个数字 before 阅读它似乎有点倒退。 (看起来您得到了正确的零件,但组装顺序错误。)
  • if (a == true)if (a) 相同。
  • cin &gt;&gt; ... 移到测试上方,将测试更改为 if (!checkIfBin(okt[j]) break; 并完全删除 else 处理程序。
  • 我在 main 之前有一个函数声明,在末尾有一个函数
  • @ŁukaszStrama .. 这与这个问题完全没有有关。只需逐行查看您的代码,然后尝试向自己解释。

标签: c++ arrays loops binary


【解决方案1】:

问题源于您在阅读输入之前正在检查输入。

for (int j = 0; j < 4; j++) 
{
    cout << "Enter" << j+1 << " octet in binary system: ";

    cin >> okt[j];

    if (!checkIfBin(okt[j]))
        break;
}

应该很好用。

【讨论】:

    【解决方案2】:

    感谢大家的回答, 特别是@WhozCraig

    for (int j=0; j < 4; j++) {
            cout << "Enter" << j+1 << " octet in binary system: ";
            
            cin >> okt[j];
    
            if ((!checkIfBin(okt[j])) break; 
        }
    

    工作正常

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      相关资源
      最近更新 更多