C++ 我的c++;循环不';当我告诉它通过控制台做这件事时,它不会停止
我已经做了一个循环,它应该加密我告诉它的短语,但由于问题没有完成。它应该检测我在控制台中何时说“停止”,并关闭循环。它不起作用。 我想让它做的是检测我是否说停止并打破循环。我不应该因为从其他单词中获取字母s t o p而产生任何随机错误。正如您所看到的,每当有一个字母出现顺序错误时,它都会重置向量,从而锁定所有ifs,直到“c”以正确的顺序获得正确的字母C++ 我的c++;循环不';当我告诉它通过控制台做这件事时,它不会停止,c++,C++,我已经做了一个循环,它应该加密我告诉它的短语,但由于问题没有完成。它应该检测我在控制台中何时说“停止”,并关闭循环。它不起作用。 我想让它做的是检测我是否说停止并打破循环。我不应该因为从其他单词中获取字母s t o p而产生任何随机错误。正如您所看到的,每当有一个字母出现顺序错误时,它都会重置向量,从而锁定所有ifs,直到“c”以正确的顺序获得正确的字母 using namespace std; int main() { char c,v[5]; int i=0; while(
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;
}
使用名称空间std;
int main()
{
字符c,v[5];
int i=0;
而(i!=1)
{
cin.get(c);
如果(c='s'或v[1]='s')
{
v[1]='s';
如果(c=='t'或v[2]='t')
{
v[2]='t';
如果(c='o'或v[3]='o')
{
v[3]='o';
如果(c=='p'或v[4]=='p')
{
v[4]='p';
v[1]=v[2]=v[3]=v[4]=0;
i=1;
}
其他的
v[1]=v[2]=v[3]=0;
}
其他的
v[1]=v[2]=0;
}
其他的
v[1]=0;
}
cout这应该是有效的,不是缩进的地狱代码。它假设您一次输入一个字符
#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;
}
#包括
int main(int argc,char const*argv[]
{
字符关键字[]=“停止”;
字符*匹配字符=关键字;
来自用户的字符;
while(*匹配字符!='\0')
{
标准::cin.get(来自用户的字符);
//如果字符不同,则重置
if(*匹配字符!=来自用户的字符)
匹配字符=关键字;
//增加匹配位置
if(*匹配的字符==来自用户的字符)
++匹配字符;
//忽略缓冲区中的rest
std::cin.ignore();
}
返回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;
}
#包括
int main(int argc,char const*argv[]
{
字符关键字[]=“停止”;
字符*匹配字符=关键字;
来自用户的字符;
while(*匹配字符!='\0')
{
标准::cin.get(来自用户的字符);
//如果字符不同,则重置
if(*匹配字符!=来自用户的字符)
匹配字符=关键字;
//增加匹配位置
if(*匹配的字符==来自用户的字符)
++匹配字符;
//忽略缓冲区中的rest
std::cin.ignore();
}
返回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;
}
#包括
使用名称空间std;
int main()
{
字符c,v[5];
int i=0;
而(i!=1)
{
cin.get(c);
如果(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;
}
其他的
v[1]=v[2]=v[3]=0;
v[3]='o';
}
其他的
v[1]=v[2]=0;
v[2]='t';
}
其他的
v[1]=0;
v[1]='s';
}
如果(i==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;
}
#包括
使用名称空间std;
int main()
{
字符c,v[5];
int i=0;
而(i!=1)
{
cin.get(c);
如果(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;
}
其他的
v[1]=v[2]=v[3]=0;
v[3]='o';
}
其他的
v[1]=v[2]=0;
v[2]='t';
}
其他的
v[1]=0;
v[1]='s';
}
如果(i==1)
打破
}
返回0;
}
c
是从用户输入中读取的单个char
。它不能同时是s
、t
、o
和p
,但这是您修改i
它不能“变”的唯一情况任何内容;读取一个字符,然后永不更改。例如,如果c为“s”,则第一个if将被解锁,并使向量v[1]=“s”,if将保持打开状态,直到c出现错误value@drescherjm数组(“向量”)包含“stop”字符已经键入的。或者更确切地说,它是用来。您键入s
,现在c包含“s”。计算机会检查c是否包含“s”。这样它会运行if语句。计算机设置v[1]='s';
。然后计算机会检查c是否包含“t”或v[2]包含“t”。因此计算机不会再次运行“else”语句,该语句将v[1]=0;
设置为0。最终结果:什么也不会发生。c
是从用户输入读取的单个char
。它可以