Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我的c++;当我使用该变量时,程序工作错误?_C++_Variables - Fatal编程技术网

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:的确如此。