C ++中do-while循环中的两个条件

时间:2014-04-01 15:53:09

标签: c++ do-while

我一直在尝试制作一个线性反馈移位寄存器,但是代码中有一些我无法找到的错误,我试图通过执行do-while的条件来诊断问题处理程序主要操作的循环,即对位进行xoring并将它们移位,可以是以下两种方法之一:

 operSeq !=inpSeq 
 turnCount < 31. 

程序要求用户输入5位作为LFSR的初始卡,然后他/她必须输入表示多项式的第二个二进制序列:如果它是x^5+x^4+x^2+x^1+1;用户应该的序列输入为10111,如果其中任何一个为1,则检查这些位,它的位置将存储在名为xorArray的向量中。作为此代码的测试用例,如果用户输入初始卡的10101和poly位置的01111,程序将生成无限数量的二进制序列,这些序列不遵循xor正常运行,并且它们也不会在do-while循环指定的31转之后终止!我需要帮助诊断此代码。这是它:

#include <iostream>
#include <bitset>
#include <vector>
using namespace std;

int main()
{
    // int x, y;
    int turnCount = 0;
    bitset <5> inpSeq;
    bitset <5> polyLoc; 
    bitset <5> operSeq;
    bitset <5> bit;
    vector <int> xorArray;
    vector <int> keyReg;

    cout << "Enter a 5-bit sequence: \n";
    cin >> inpSeq;
    cout << "Enter poly: \n";
    cin >> polyLoc;

    for ( unsigned int i = 0;  i < polyLoc.size(); i++)
    {
       if( polyLoc[i] == 1)
       {
          xorArray.push_back(i);
       }
    }

    cout << "----" << "\n";
    operSeq = inpSeq;
    keyReg.push_back(inpSeq[0]);

    int x = xorArray[0];
    bit[4] = operSeq[x];
    do
    {
       for ( unsigned int j = 1; j < xorArray.size() ; j=j+1 )
       {
          bit[4] = bit[4] ^ operSeq[j];
       }

       operSeq >>= 1;
       operSeq[4]  = bit[4]; 
       cout << operSeq << "\n";
       keyReg.push_back(operSeq[0]);
       turnCount ++;
    } while ((operSeq != inpSeq) || (turnCount < 31));

    cout << "Generated key is: ";
    for (unsigned int k = 0; k < keyReg.size(); k++)
    {
       cout  <<  keyReg[k];
    }

    cout << "\n";
    cout << "Bit 1 positions: ";
    for ( unsigned int g = 0; g < xorArray.size(); g++)
    { 
       cout << xorArray[g];
    }
    cout << "\n";
    cout << "Key length is: " << keyReg.size();
    cout << "\n";
    cin.get();
}

3 个答案:

答案 0 :(得分:1)

你应该使用AND&amp;&amp;运算符而不是OR ||你的do {} while循环运算符。只要两个条件都为真,您就希望循环继续,只要其中一个条件为真,就可以继续循环。

答案 1 :(得分:1)

您的情况是(operSeq != inpSeq) || (turnCount < 31)。因此,如果其中任何一个条件为真,那么它将继续循环。您希望在turnCount >= 31时停止循环,因此您的条件应为(operSeq != inpSeq) && (turnCount < 31)

答案 2 :(得分:0)

如果你的while循环在turnCount达到31之后没有处理任何东西,那么它就会上升(operSeq!= inSeq)。

在你的同时||声明,如果第一个条件为真,它将不会处理第二个条件。如果(operSeq!= inSeq)或&amp;&amp;他们在一起,如果他们都需要真实地运行。

本来可以做一个评论,但还没有代表:/