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

C++ Warning pop up help when trying to generate random numbers?

本文关键字:警告 帮助 随机数 C++      更新时间:2023-10-16

尝试编写代码来生成 x、y 和 z 的随机速度,将这些速度限制在方程 x^2+y^2+z^2 <= 200 中。我收到警告:弹出指向算术 [-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 arenx: 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 %dn", x, y, z);
}
}

主要问题似乎是这段代码看起来不像是由一个人逐段编写的。这就像从其他地方复制的零碎碎片的奇怪大杂烩,这些碎片不适合。

让我们来看看它。

#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,除了你通常使用std::coutstd::cinC++。哪些是在<iostream>中声明的,您包含但没有使用。

如果你打算使用scanf(我不推荐(,你应该始终检查它的返回值以确保它是成功的:if (scanf("%d", &N) != 1) { /* error */ }.

random [N];

这句话毫无意义。您正在索引到一个名为random的数组中,该数组不存在(代码中没有声明名为random的变量(。您没有收到错误的唯一原因是在某些平台上有一个名为random的(非标准(函数,但将函数视为数组也没有意义。这可能是您要询问的警告的来源。

printf("The velocity of the particles arenx: y: z:n");
srand(time(NULL));

你包含了<cstdlib>,所以这应该是std::srand,而不是srandtime根本没有声明;你忘了包含<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 %dn", x, y, z);
}
}

到了main末尾,我们从未使用过开头声明的xyz变量。N用得有点正确。vt使用不正确(在初始化之前(。pow只是一个错误:它只用作函数,而不是变量。

#include <cstdlib>
#include <iostream>
#include <cmath>
#include <ctime>
using namespace std;
int main(){
int N , x, y, z, vt;
cout << "Enter the number of particles: n";
cin >> N;
cout << "The velocity of the particles arenx: y: z:n";
std::srand(time(NULL));
for(int i = 1; i <= N; i++){
int x = std::rand() % vt;
int y = std::rand() % vt;
int z = std::rand() % vt;
vt = 200 - ( std::pow(x,2)+std::pow(y,2)+std::pow(z,2));
cout << "%d" << x << " %d" << y << " %dn" << z;
}
}