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

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

本文关键字:我的 循环 操作 执行 控制台      更新时间:2023-10-16

我做了一个循环,应该加密我告诉它的短语,但由于问题而没有完成。它应该检测到我在控制台中说"停止"并关闭循环。它不起作用。 我希望它做的是检测我是否说停止并打破循环。我不应该从其他单词中获取字母s t o p而获得任何随机失误。如您所见,每次出现无序字母时,它都会重置锁定所有 if 的向量,直到"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 != '')
{
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;
}