[英]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.