VS Studio C++奇怪的输出(质数检查)
VS Studio bizarre output in C++ (prime number check)?
我有一个简短的程序,它包含一个函数,可以检查一个数字是否是素数。但是,当我调用数字3
的函数时,编译器在VS Studio中输出127
。我想问这是为什么?
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int k) {
for (int i = 2; i < sqrt(i); i++) {
if (k%i == 0) {
return true;
}
else {
return false;
}
}
}
int main()
{
cout << isPrime(3) << endl;
return 0;
}
正如评论者所暗示的那样,您的程序具有未定义的行为,因为isPrime
并不总是从您所说的函数返回。从C++标准:
从函数末尾流出等效于没有值的返回;这会导致值返回函数中出现未定义的行为。
因为你已经声明isPrime
将返回一个bool
,并且你并不总是返回一个bool
你有未定义的行为。
相反,您可能希望迭代所有奇数,直到 k
,并检查k
是否可以被该数整除,如果是,则return false
(因为它不会是素数(。否则,return true
在最后。
它可能看起来像这样:
bool isPrime(unsigned long k)
{
for (auto i = 3; i * i <= k; i += 2)
if (k % i == 0)
return false;
return true;
}
我会让你弄清楚如何处理2
.
相关文章:
- 素数检查 C++ 函数输出非素数的数字
- VS Studio C++奇怪的输出(质数检查)
- 为什么我们总是检查输入是否失败而不检查输出
- 如何检查输出流是否为 std::cout in C++
- 我正在尝试检查可接受的身高和体重,并让 c++ 编译器输出候选人被拒绝的原因
- 在数组中输入5个元素,检查验证,然后输出C++
- 运行时检查失败 #2,AND 数组值与输出交换不正确
- fflush-如何检查上次操作是否为输出操作
- C++检查文件是否存在,如果存在,则更改输出
- 与实际内存内容相比,GDB 内存检查输出偏差 8 个字节
- 文件输出中的简单错误检查
- 顺序我正在检查输出错误的字符串
- 检查字符串的typeinfo时出现奇怪的输出
- 正在检查CppUnit中的打印输出
- 检查阵列输出
- 如何在 Linux 中检查正在运行的进程版本读取"ps aux"输出
- 编译时检查输出(<<)和关系(<、>等)是否可用
- 检查原始文件的输出
- c++单元测试检查输出是否正确
- 检查输出顺序是否正确