我创建了一个循环,该循环应该加密我告诉它的短语,但是由于问题而没有完成。它应该检测我何时在控制台中说“停止”并关闭循环。没用 我要执行的操作是检测我是否说过停止并打破循环。我不应该从换句话说得到字母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;
}
答案 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;
}