C++ 尝试生成随机数时弹出警告帮助?
C++ Warning pop up help when trying to generate random numbers?
尝试编写代码来生成 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::cout
和std::cin
C++。哪些是在<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
,而不是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 %dn", x, y, z);
}
}
到了main
末尾,我们从未使用过开头声明的x
、y
z
变量。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;
}
}
- 警告处理为错误这里有什么问题
- 需要帮助设置在C++中使用的Potrace
- 在指针的帮助下,文本文件中单词的频率
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- cppcheck在const std::string[]上引发警告
- GCC对可能有效的代码抛出init list生存期警告
- 如何在BST的这个简单递归实现中消除警告
- 关于std::move的使用,是否有编译警告
- g++ 在某个类成员未初始化时不发出警告
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 如何在Qbutton的帮助下更改Q对话框的宽度
- 需要帮助将结构数组传递给函数
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- C++需要帮助从用户那里获得一个整数,并确保它在另外两个整数之间
- 使用typeid警告未使用的变量
- 示例C++项目编译中的警告
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- C++ 尝试生成随机数时弹出警告帮助?
- 是“警告 C4127”(条件表达式是常量)曾经有帮助
- Visual Studio 2005 - 处理C++ "initialized but not referenced"范围帮助程序破坏警告?