Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.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+中do while循环末尾的数组+;?_C++_Arrays_Recursion_Do While - Fatal编程技术网

C++ 如何清除C+中do while循环末尾的数组+;?

C++ 如何清除C+中do while循环末尾的数组+;?,c++,arrays,recursion,do-while,C++,Arrays,Recursion,Do While,我的函数的目的是生成8个随机字母n次(编译时指定)。为此,我编写了两个名为genNumbers的函数,该函数生成8个随机数(介于0和25之间),并将它们放入名为numbers的数组中,和convert——它将数组中的每个数字转换为字母表中相应的字母,并将这些字母放入名为字母的数组中。这两个函数工作得很好,我对它们进行了多次测试 现在我在实现它们的时候遇到了困难 我希望main接受一个参数,该参数指定需要多少字母数组。因此,例如调用a.out 3将输出如下内容 SAFJPONG 1 VYREM

我的函数的目的是生成8个随机字母n次(编译时指定)。为此,我编写了两个名为
genNumbers
的函数,该函数生成8个随机数(介于0和25之间),并将它们放入名为
numbers
的数组中,和
convert
——它将数组中的每个数字转换为字母表中相应的字母,并将这些字母放入名为
字母的数组中。这两个函数工作得很好,我对它们进行了多次测试

现在我在实现它们的时候遇到了困难

我希望main接受一个参数,该参数指定需要多少
字母
数组。因此,例如调用
a.out 3
将输出如下内容

SAFJPONG   1
VYREMNXZ   2
QWMKUZXC   3
这是我的主要观点:

int numbers[8];
string letters[8];

void genNumbers() {
int i;

srand (time(NULL));

for (i = 0; i < 8; i++) {
    numbers[i] = rand() % 25;
}
}

void convert() {
int i;

for (i = 0; i < 8; i++) {
    if (numbers[i] == 0) {
        letters[i] = "A";
    }
    else if (numbers[i] == 1) {
        letters[i] = "B";
    }
    else if (numbers[i] == 2) {
        letters[i] = "C";
    }
    else if (numbers[i] == 3) {
        letters[i] = "D";
    }
    else if (numbers[i] == 4) {
        letters[i] = "E";
    }
    else if (numbers[i] == 5) {
        letters[i] = "F";
    }
    else if (numbers[i] == 6) {
        letters[i] = "G";
    }
    else if (numbers[i] == 7) {
        letters[i] = "H";
    }
    else if (numbers[i] == 8) {
        letters[i] = "I";
    }
    else if (numbers[i] == 9) {
        letters[i] = "J";
    }
    else if (numbers[i] == 10) {
        letters[i] = "K";
    }
    else if (numbers[i] == 11) {
        letters[i] = "L";
    }
    else if (numbers[i] == 12) {
        letters[i] = "M";
    }
    else if (numbers[i] == 13) {
        letters[i] = "N";
    }
    else if (numbers[i] == 14) {
        letters[i] = "O";
    }
    else if (numbers[i] == 15) {
        letters[i] = "P";
    }
    else if (numbers[i] == 16) {
        letters[i] = "Q";
    }
    else if (numbers[i] == 17) {
        letters[i] = "R";
    }
    else if (numbers[i] == 18) {
        letters[i] = "S";
    }
    else if (numbers[i] == 19) {
        letters[i] = "T";
    }
    else if (numbers[i] == 20) {
        letters[i] = "U";
    }
    else if (numbers[i] == 21) {
        letters[i] = "V";
    }
    else if (numbers[i] == 22) {
        letters[i] = "W";
    }
    else if (numbers[i] == 23) {
        letters[i] = "X";
    }
    else if (numbers[i] == 24) {
        letters[i] = "Y";
    }
    else {
        letters[i] = "Z";
    }
}
}

int main(int argc, char * argv[]) {
 int i = 0;
 int g,n;

if (argc == 2 && argv[1][0] > 0) {
    n = atoi(argv[1]);

    do {
        genNumbers();
        convert();
        for (g = 0; g < 8; g++) {
            cout << letters[g];     // this is where I believe the problem is
        }
        cout << "   " << i+1 << endl;
        i++;
    }
    while (i < n);
}

return 0;
}
显然,我的main每次都返回相同的
字母
数组,而不是像我希望的那样创建3个不同的字母


我已经评论了我认为我的问题产生的地方。我觉得这与必须删除数组有关,以便每次都创建一个新的数组。有人能看出我哪里出了问题吗?

下面是我如何实施相同程序的。我认为你的代码
字符串字母[8]中的第二行有点可疑。此外,您可能需要检查
genNumbers
convert
功能

#include <stdlib.h>
#include <time.h>
#include <stdio.h>

int nums[8];
char letters[9];

void genNumbers() {
    for (int i=0; i<8; i++)
        nums[i] = rand()%26;
}

void convert() {
    for (int i=0; i<8; i++)
        letters[i] = 'A' + nums[i];
}

int main(int argc, char **argv) {
    letters[8] = '\0';
    srand(time(NULL));
    int n = 0;
    if (argc == 2) {
        n = atoi(argv[1]);
        for (int i=0; i<n; i++) {
            genNumbers();
            convert();
            printf("%s\n", letters);
        }
    }
    return 0;
}
编辑:

如果您仍然希望避免在main中调用
srand()
,那么可以在
genNumbers
本身中执行以下操作:

void genNumbers() {
    srand(time(NULL)*rand()); // notice time(NULL)*rand()
    for (int i=0; i<8; i++)
        nums[i] = rand()%26;
}
void genNumbers(){
srand(time(NULL)*rand();//注意时间(NULL)*rand()

对于(int i=0;i以下是我如何实现相同程序的。我认为代码
字符串字母[8];
中的第二行有点可疑。此外,您可能需要检查
genNumbers
convert
函数

#include <stdlib.h>
#include <time.h>
#include <stdio.h>

int nums[8];
char letters[9];

void genNumbers() {
    for (int i=0; i<8; i++)
        nums[i] = rand()%26;
}

void convert() {
    for (int i=0; i<8; i++)
        letters[i] = 'A' + nums[i];
}

int main(int argc, char **argv) {
    letters[8] = '\0';
    srand(time(NULL));
    int n = 0;
    if (argc == 2) {
        n = atoi(argv[1]);
        for (int i=0; i<n; i++) {
            genNumbers();
            convert();
            printf("%s\n", letters);
        }
    }
    return 0;
}
编辑:

如果您仍然希望避免在main中调用
srand()
,那么可以在
genNumbers
本身中执行以下操作:

void genNumbers() {
    srand(time(NULL)*rand()); // notice time(NULL)*rand()
    for (int i=0; i<8; i++)
        nums[i] = rand()%26;
}
void genNumbers(){
srand(time(NULL)*rand();//注意时间(NULL)*rand()

对于(int i=0;i以下是我如何实现相同程序的。我认为代码
字符串字母[8];
中的第二行有点可疑。此外,您可能需要检查
genNumbers
convert
函数

#include <stdlib.h>
#include <time.h>
#include <stdio.h>

int nums[8];
char letters[9];

void genNumbers() {
    for (int i=0; i<8; i++)
        nums[i] = rand()%26;
}

void convert() {
    for (int i=0; i<8; i++)
        letters[i] = 'A' + nums[i];
}

int main(int argc, char **argv) {
    letters[8] = '\0';
    srand(time(NULL));
    int n = 0;
    if (argc == 2) {
        n = atoi(argv[1]);
        for (int i=0; i<n; i++) {
            genNumbers();
            convert();
            printf("%s\n", letters);
        }
    }
    return 0;
}
编辑:

如果您仍然希望避免在main中调用
srand()
,那么可以在
genNumbers
本身中执行以下操作:

void genNumbers() {
    srand(time(NULL)*rand()); // notice time(NULL)*rand()
    for (int i=0; i<8; i++)
        nums[i] = rand()%26;
}
void genNumbers(){
srand(time(NULL)*rand();//注意时间(NULL)*rand()

对于(int i=0;i以下是我如何实现相同程序的。我认为代码
字符串字母[8];
中的第二行有点可疑。此外,您可能需要检查
genNumbers
convert
函数

#include <stdlib.h>
#include <time.h>
#include <stdio.h>

int nums[8];
char letters[9];

void genNumbers() {
    for (int i=0; i<8; i++)
        nums[i] = rand()%26;
}

void convert() {
    for (int i=0; i<8; i++)
        letters[i] = 'A' + nums[i];
}

int main(int argc, char **argv) {
    letters[8] = '\0';
    srand(time(NULL));
    int n = 0;
    if (argc == 2) {
        n = atoi(argv[1]);
        for (int i=0; i<n; i++) {
            genNumbers();
            convert();
            printf("%s\n", letters);
        }
    }
    return 0;
}
编辑:

如果您仍然希望避免在main中调用
srand()
,那么可以在
genNumbers
本身中执行以下操作:

void genNumbers() {
    srand(time(NULL)*rand()); // notice time(NULL)*rand()
    for (int i=0; i<8; i++)
        nums[i] = rand()%26;
}
void genNumbers(){
srand(time(NULL)*rand();//注意时间(NULL)*rand()

对于(int i=0;我能展示一下你的
genNumbers
convert
函数的实现吗?根据我在这里看到的情况,看起来你正在修改全局变量。这是真的吗?为什么?这可能不是你的理想情况
生成8个随机字母
让我猜一下,你正在调用
srand
genNumbers
的开头,或者根本不调用它。您的main中没有srand()调用。我假设您在genNumbers函数?srand(time(NULL))中重复调用它根据当前时间(以秒为单位)初始化随机数生成器。在两次调用之间,秒很可能不会发生变化,因此您将获得相同的数字。当程序启动时,只需调用它一次starts@cursayer尝试定义
srand(时间(空))
一次,而不是每次调用该函数。您可以显示
genNumbers
convert
函数的实现吗?根据我在这里看到的情况,看起来您都在修改全局变量。这是真的吗?为什么?这可能不是理想情况
生成8个随机字母我猜,您在
genNumbers
的开头调用了
srand
,或者根本没有调用它。您的main中没有srand()调用。我假设您在genNumbers函数?srand(time(NULL))中重复调用它根据当前时间(以秒为单位)初始化随机数生成器。在两次调用之间,秒很可能不会发生变化,因此您将获得相同的数字。当程序启动时,只需调用它一次starts@cursayer尝试定义
srand(时间(空))
一次,而不是每次调用该函数。您可以显示
genNumbers
convert
函数的实现吗?根据我在这里看到的情况,看起来您都在修改全局变量。这是真的吗?为什么?这可能不是理想情况
生成8个随机字母我猜,您在
genNumbers
的开头调用了
srand
,或者根本没有调用它。您的main中没有srand()调用。我假设您在genNumbers函数?srand(time(NULL))中重复调用它根据当前时间(以秒为单位)初始化随机数生成器。在两次调用之间,秒很可能不会发生变化,因此您将获得相同的数字。当程序启动时,只需调用它一次starts@cursayer尝试定义
srand(时间(空))
一次,而不是每次调用函数。根据我在这里看到的内容,可以显示
genNumbers
convert
函数的实现吗