尝试编写代码以生成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);
}
}
答案 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::cout
和std::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
在这里(在第一次迭代中)未初始化。
此外,您还创建了新的局部变量x
,y
,z
,这些局部变量仅存在于循环中(并遮盖了在变量开头声明的同名外部变量main
。
vt = 200 - ( pow(x,2)+pow(y,2)+pow(z,2));
此行是一个硬错误:您正在尝试将pow
作为函数调用,但这是一个声明为int
的局部变量(请参阅main
的开头)
printf("%d %d %d\n", x, y, z);
}
}
到达main
的结尾时,我们从未使用过开头声明的x
,y
,z
变量。 N
的使用方式有些正确。 vt
的使用不正确(在初始化之前)。 pow
只是一个错误:它仅用作函数,而不是变量。
答案 1 :(得分:0)
conda env export