我遇到了这个问题,条件可能会拒绝该字符串,并且需要再次生成它(它是一个随机字符串)
#include <string>
int main(){
std::string str;
do{
std::string str{""};
str.append("foo");
}
while( str != "foo" );
return 0;
}
我希望str等于“ foo”,程序将继续执行,但事实并非如此。卡住了。使用gdb进行检查时,我注意到它从str.append("foo");
跳回到std::string str{""};
,只有 then 继续检查条件,因此该条件将永远无法满足。为什么会这样?
答案 0 :(得分:2)
循环中您有一个重复的str
变量:
std::string str;
do{
std::string str{""}; // <----- here
str.append("foo");
}
while( str != "foo" );
这使得while
循环正在检查第一个str
,因为循环内的str
不在范围之内,并且永远不会更改。
在while
循环中,您正在修改第二个str
变量,因为(来自cppreference):
实际范围与潜在范围相同,除非存在带有引入相同名称的声明的嵌套块(在这种情况下,嵌套声明的整个潜在范围被排除在外部声明的范围之外)
要解决此问题,只需从代码中删除行std::string str{""};
。如果您需要将其重置,请修改str
而不是创建一个新的>
std::string str;
do{
str = "";
str.append("foo");
}
while( str != "foo" );