While循环的变量未被识别为已初始化

时间:2017-01-27 19:51:16

标签: c++ variables visual-studio-2013 while-loop

我正在尝试使用变量作为while循环的参数,如下所示。

int compChoice;
while (compChoice < 8){

        compChoice = rand() % 8 + 0;
        cout << compChoice;
    }

我的目标是生成一个随机数,直到输出为8。问题是我的编译器(visual studio pro 2013)告诉我变量未初始化。我删除了while循环并将变量保留在那里并重试,然后编译器告诉我变量compChoice未被引用。我也试过使用最后两行,它工作得很好。我认为我对这个论点做错了,但我无法弄清楚是什么。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

while分配compChoice之前,您的compChoice条件正在阅读int compChoice; do { compChoice = rand() % 8; cout << compChoice; } while (compChoice < 8); 的内容。考虑使用do-while循环,它将在检查条件之前执行一次循环体:

rand() % 8

然而,由于模数运算的定义,compChoice 保证小于8 ,因此您甚至无法正常工作。在编写代码时,循环永远不会终止(除非rand() % 9中的未初始化值在首次读取时已小于8)。

也许您的意思是rand() % 8 + 1compChoice?但这甚至没有意义,因为它只是将{8}分配给Sequential的一种昂贵方式。看起来你需要退后一步,弄清楚你甚至想在这里做什么。

答案 1 :(得分:2)

在您的示例中,您的程序永远不会结束。

 rand() % 8;

生成0到7之间的数字。所以你需要:

rand() % 8 + 1;

生成1到8之间的数字。

此外,您需要使用以下命令初始化rand:

#include <ctime>

srand(time(NULL));

在随机生成之前,

int compChoice=0;
循环之前

答案 2 :(得分:0)

在循环中使用它之前,您没有初始化compChoice。所以,它有一个未定义的值。