簡體   English   中英

當我告訴它通過控制台執行操作時,我的c ++循環不會停止

[英]My c++ loop doesn't stop when i tell it to do it through the console

我做了一個循環,該循環應該加密我告訴它的短語,但是由於問題而沒有完成。 它應該檢測我何時在控制台中說“停止”並關閉循環。 沒用 我要執行的操作是檢測我是否說過停止並打破循環。 我不應該因為讓其他詞停止字母而引起任何隨機的誤擊。 如您所見,每次字母出現亂序時,它都會重置向量,從而鎖定所有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;
  }

那應該工作並且不縮進地獄代碼。 它假定您一次輸入一個字符。

#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;
}

按照您的邏輯,您只需要在每個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;
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM