尝试生成随机数时,C ++警告弹出帮助吗?

时间:2018-10-04 17:33:35

标签: c++

尝试编写代码以生成x,y和z的随机速度,将这些速度限制为等式x ^ 2 + y ^ 2 + z ^ 2 <=200。我在警告:指向a的指针算术[-Wpointer-arith]警告中使用的函数弹出?任何帮助将不胜感激,新的C ++编码学员

#include <cstdlib>
#include <iostream>
#include <math.h>

int main(){
    int N , x, y, z, vt, pow;
    printf("Enter the number of particles: \n");
    scanf("%d", &N);
    random [N];

    printf("The velocity of the particles are\nx: y: z:\n");
    srand(time(NULL));
    for(int i = 0; i <= N; i++){
        // the square is N x N, so you want two numbers from 0 to N-1
        int x = rand() % vt;
        int y = rand() % vt;
        int z = rand() % vt;
        vt = 200 - ( pow(x,2)+pow(y,2)+pow(z,2));

        printf("%d %d %d\n", x, y, z);

    }
}

2 个答案:

答案 0 :(得分:1)

主要问题似乎是这段代码看起来好像不是一个人一步一步地编写的。就像是从其他地方复制而来的零碎的碎片一样奇怪的碎片。

我们来看一下。

#include <cstdlib>

这是<stdlib.h> C标头的C ++版本。不太奇怪。

#include <iostream>

基于C ++流的I / O的<iostream>头。好。

#include <math.h>

这是基本数学函数的C标头。 C ++版本称为<cmath>。你从哪里得到的?

int main(){

典型的C ++ main函数。

    int N , x, y, z, vt, pow;

在这里,您在使用变量之前就已经预先声明了许多变量。这(仍然)在C中还是很常见,但不是惯用的C ++。在C ++中,您可能会在变量使用位置附近声明它们。

另一件事很奇怪:您的一个变量称为pow,它也是标准函数的名称。

    printf("Enter the number of particles: \n");
    scanf("%d", &N);

在这里,您要调用printf / scanf,它们是用于输出/输入的标准C函数,没有包括其正确的头文件<stdio.h>。但是您表面上是在编写C ++,所以应该改为<cstdio>std::printf / std::scanf,但在C ++中,通常使用std::coutstd::cin 。在<iostream>中声明了哪些内容,其中包含但未使用。

如果您完全要使用scanf(我不建议这样做),则应始终检查其返回值以确保成功:if (scanf("%d", &N) != 1) { /* error */ }

    random [N];

这行没有意义。您正在索引名为random的数组,该数组不存在(代码中未声明名为random的变量)。不会出错的唯一原因是在某些平台上有一个名为random的(非标准)函数,但是将函数视为数组也没有任何意义。这可能是您要提出警告的原因。

    printf("The velocity of the particles are\nx: y: z:\n");

    srand(time(NULL));

您包括了<cstdlib>,因此应该是std::srand,而不是srand。根本没有声明time;您忘记了包含<ctime>(或<time.h>,但您应该真正弄清楚是使用C ++还是C编程)。

    for(int i = 0; i <= N; i++){

这不是一个硬错误,但是看到从0<= N的循环会产生一个红色标记。通常是1<=0<。您执行此循环的方式将迭代N+1次。

        // the square is N x N, so you want two numbers from 0 to N-1
        int x = rand() % vt;
        int y = rand() % vt;
        int z = rand() % vt;

应为std::rand,而不是rand

vt在这里(在第一次迭代中)未初始化。

此外,您还创建了新的局部变量xyz,这些局部变量仅存在于循环中(并遮盖了在变量开头声明的同名外部变量main

        vt = 200 - ( pow(x,2)+pow(y,2)+pow(z,2));

此行是一个硬错误:您正在尝试将pow作为函数调用,但这是一个声明为int的局部变量(请参阅main的开头)

        printf("%d %d %d\n", x, y, z);
    }
}

到达main的结尾时,我们从未使用过开头声明的xyz变量。 N的使用方式有些正确。 vt的使用不正确(在初始化之前)。 pow只是一个错误:它仅用作函数,而不是变量。

答案 1 :(得分:0)

conda env export