当我告诉它通过控制台执行操作时,我的c ++循环不会停止

时间:2019-11-27 17:35:31

标签: c++

我创建了一个循环,该循环应该加密我告诉它的短语,但是由于问题而没有完成。它应该检测我何时在控制台中说“停止”并关闭循环。没用 我要执行的操作是检测我是否说过停止并打破循环。我不应该从换句话说得到字母s来得到任何随机的误击。如您所见,每次字母混乱时,它都会重置向量,从而锁定所有ifs,直到'c'以正确的顺序获取正确的字母。

using namespace std;

int main()
{
  char c,v[5];
  int i=0;
    while(i!=1)
    {
        cin.get(c);
        if(c=='s' or v[1]=='s')
        {
            v[1]='s';
            if(c=='t' or v[2]=='t')
            {
                v[2]='t';
                if(c=='o' or v[3]=='o')
                {
                    v[3]='o';
                    if(c=='p' or v[4]=='p')
                    {
                        v[4]='p';
                        v[1]=v[2]=v[3]=v[4]=0;
                        i=1;
                    }
                    else
                        v[1]=v[2]=v[3]=0;
                }
                else
                    v[1]=v[2]=0;
            }
            else
              v[1]=0;
        }
        cout<<c;
        if (i==1)
            break;
    }
    return 0;
  }

2 个答案:

答案 0 :(得分:2)

这应该可以工作,并且不会缩进地狱代码。它假定您一次输入一个字符。

#include <iostream>

int main(int argc, char const *argv[])
{
    char keyword[] = "stop";
    char* matching_char = keyword;
    char char_from_user;
    while(*matching_char != '\0')
    {
        std::cin.get(char_from_user);
        // Reset if different character
        if(*matching_char != char_from_user)
            matching_char = keyword;

        // Increment position of match
        if(*matching_char == char_from_user)
            ++matching_char;
        // Ignore rest in buffer
        std::cin.ignore();
    }

    return 0;
}

答案 1 :(得分:0)

按照您的逻辑,您只需要在每个if / else条件之后分配v数组值,否则它将立即立即重新分配为0。例如,您首先分配v [1] ='s',然后右分配将其分配给v [1] = 0后,因为if在第一次迭代中返回false。以下代码可以解决该问题。

#include <iostream>

using namespace std;

int main()
{
  char c,v[5];
  int i=0;
    while(i!=1)
    {
        cin.get(c);
        if(c=='s' || v[1]=='s')
        {
            if(c=='t' || v[2]=='t')
            {
                if(c=='o' || v[3]=='o')
                {
                    if(c=='p' || v[4]=='p')
                    {
                        v[4]='p';
                        v[1]=v[2]=v[3]=v[4]=0;
                        i=1;
                    }
                    else
                        v[1]=v[2]=v[3]=0;
                    v[3]='o';
                }
                else
                    v[1]=v[2]=0;
                v[2]='t';
            }
            else
              v[1]=0;
            v[1]='s';
        }
        if (i==1)
            break;
    }
    return 0;
  }