为什么我的用户定义函数的 return 语句在某些情况下不起作用?
Why a return statement of my user defined function doesn't work at some case?
我的一个素数检查函数显示9、15等不是素数的地方是素数。我的代码是:
#include<iostream>
#include<cstdio>
using namespace std;
int prime_function(int num, int i);
int main(){
int num,flag=0;
while (cin>>num){
if(num!=1){
flag=prime_function(num,2);
if(flag==0)
printf("%d isn't a prime.n",num);
else {
printf("%d is a prime.n",num);
}
}
else {
printf("%d is a prime.n",num);
}
}
return 0;
}
int prime_function(int num, int i)
{
if(num%i==0){
printf("when num mod i == 0, num=%d i=%dn",num,i);
return 0;//This Statement doesn't work for like num=9,15...
}
else if((i*i)+1<=num){
printf("when num mod i != 0, num=%d i=%dn",num,i);
prime_function(num,++i);
}
printf("Going to main function.n");
return 1;
}
我使代码非常图形化,这样可以很容易地发现错误。当我输入9时,程序显示如下:
when num mod i != 0, num=9 i=2
when num mod i == 0, num=9 i=3
Going to main function.
Going to main function.
9 is a prime.
它应该打印一次"Going to main function.",然后进入main function。但是它没有,它遍历整个函数,然后到达main函数。有人能帮我解决这个问题吗?
代替
prime_function(num,++i);
你想要的return prime_function(num,++i);
您需要检查递归调用prime_function
的返回值;目前,它的返回值被忽略了,在不应该返回true的情况下,函数将返回true。
else if((i*i)+1<=num){
printf("when num mod i != 0, num=%d i=%dn",num,i);
if (!prime_function(num,++i))
return 0;
}
相关文章:
- G++ C++17 类模板参数推导在非常特殊的情况下不起作用
- EOF有更安全的替代方案吗?它在我的情况下不起作用
- c++ 选择排序在特定情况下不起作用
- 寻找有关为什么此C++代码在没有引用的情况下不起作用的解释
- 句子转换器在存在新行的情况下不起作用
- 为什么 std::void_t 在这种情况下不起作用
- C++中的dynamic_cast在没有 RTTI 的情况下不起作用;为什么?
- 为什么SFINAE在这种情况下不起作用?
- 运算符重载如何工作,为什么在我的情况下不起作用?
- 请帮助我理解为什么SFINAE在这种情况下不起作用
- 为什么#ifndef在这种情况下不起作用
- 为什么c_str在这种打开(文件名)的情况下不起作用
- ADL在特定情况下不起作用
- FillRect在某些情况下不起作用
- C++预处理器宏中的代码块在没有大括号的情况下不起作用
- 为什么cvPutText在这种情况下不起作用?
- Boost的ASIO + SSL在某些情况下不起作用
- 为什么贪婪的方法在这种情况下不起作用?
- 使用带有指针和文件的类概念 我的代码在第一种情况下不起作用,为什么?
- 为什么 std::function<boost::any ()> 在这种情况下不起作用?