C++ 为什么我的c++;当我使用该变量时,程序工作错误?
我有一个功能:C++ 为什么我的c++;当我使用该变量时,程序工作错误?,c++,variables,C++,Variables,我有一个功能: #include "motHasard.h" std::string motHasard(std::string mot) { srand(time(0)); std::string motnew(""); int position; while(mot.size()!=0) { position = rand
#include "motHasard.h"
std::string motHasard(std::string mot)
{
srand(time(0));
std::string motnew("");
int position;
while(mot.size()!=0)
{
position = rand() % mot.size();
motnew+=mot[position];
mot.erase(position,1);
}
return motnew;
}
如果我使用一个变量而不是mot.size()
(在while
中,或在位置
中)并运行程序,则当main()调用函数motHasard
时,程序停止并出现错误。
但就像那样,它工作得非常完美
为什么我不能将.size()
放在一个变量中并直接使用它呢
就像这样:
#include "motHasard.h"
std::string motHasard(std::string mot)
{
srand(time(0));
std::string motnew("");
int taille=mot.size();
int position;
while(taille!=0)
{
position = rand() % taille;
motnew+=mot[position];
mot.erase(position,1);
}
return motnew;
}
这个不起作用您忘记了需要重新计算变量的值,这是您的代码:
int taille=mot.size();
int position;
while(taille!=0)
{
position = rand() % taille;
motnew+=mot[position];
mot.erase(position,1);
}
因此,您从taille
开始,它是mot
的当前大小(假设它是12)。只要不重新计算,即使
mot
发生变化,该值仍将保持为12,因此需要进行以下更正:
int taille=mot.size();
int position;
while(taille!=0)
{
position = rand() % taille;
motnew+=mot[position];
mot.erase(position,1);
taille=mot.size(); // <--- never forget to re-calculate the while-variable
}
int taille=mot.size();
内部位置;
while(taille!=0)
{
位置=rand()%taille;
motnew+=mot[位置];
运动擦除(位置1);
Tayle = Mo.siz();/C.>代码> C++ >代码>!= C,它们是不同的语言,需要这样做。):请接受,评论和您的帖子。请选择一个并坚持它。
调用mot.erase
后的更改?我认为您需要显示不起作用的代码。x=mot.size()
并不意味着“x
始终与mot.size()
”相同,但是“x
具有mot.size()
现在具有的值”。是否没有重复的“我的变量不是数学方程”之类的问题?没错,谢谢你。但是如果是“问题”的话,程序不会停止(?)@Pikate:不,恰恰相反:while循环只有在满足条件时才会停止,这永远不会发生,因为条件不会被重新计算。那么如果“taille”“永远不要重新计算,它会保留其值。因此,while循环条件永远不会满足,因此循环应该继续运行吗?”@Dominique@Pikate:的确如此。