【问题标题】:Small program to calculate prime numbers not working计算素数的小程序不起作用
【发布时间】:2016-08-10 21:17:35
【问题描述】:

完成后,该程序将输出最多 1000 的所有素数,这是一个相当简单的程序,虽然我已经多次阅读并重新阅读语法,但它仍然无法正常工作

代码自原帖以来已被编辑,现在运行时出现 0 个错误,但它不会显示正确的结果,而是一遍又一遍地显示 008D1389。

这是完整的代码:

#include <iostream>
using namespace std;
//funtion prototypes
int output_number, number = 1, value = 1,  i;
bool is_this_number_prime(int number_in_question);
bool does_it_have_factors(int numerator, int denominator);
int prime_number_sender();
int prime_number_output();

//function definitions
int prime_number_output()
{
    int value;
    value = prime_number_sender();
    return value;
}
int prime_number_sender()
{
    int value = number;
    if (is_this_number_prime(number) == true)
        return value;
    else
        return 0;

}



bool is_this_number_prime(int number_in_question)
{
    bool answer = true;
    int i;
    for (i = 2; i <= number; i++)
    {
        if (does_it_have_factors(number, i) == true)
            answer = false;
    }
    return answer;
}

bool does_it_have_factors(int numerator, int denominator)
{
        bool result = false;

if (numerator % denominator == 0){
    bool result = true;
}
return result;

}
int main() {

bool is_this_number_prime(int number_in_question);
bool does_it_have_factors(int numerator, int denominator);
int prime_number_sender(int number_in_question);
int prime_number_output();
int output_number = prime_number_output();
int i;
for (i = 2; i <= 1000; i++)
{
    cout << prime_number_output << endl;
    number++;
}
    return 0;


}

如果有人能解释为什么代码不起作用,我将不胜感激。谢谢你。

【问题讨论】:

  • 您声明/定义int prime_output(int value);,但将其用作prime_output();。值应该是局部变量,而不是参数。
  • 修正你的缩进,你会看到void user_selection()没有结束}
  • 离题:在网络上搜索“埃拉托色尼筛”
  • main() 中,void user_selection(); 只是一个(本地范围的)函数原型,因此它实际上并没有调用该函数。你需要把它改成user_selection();(去掉void)。

标签: c++ visual-studio syntax visual-studio-2015 syntax-error


【解决方案1】:

你的代码给我带来了很多错误。

main.cpp|48|错误:函数'int prime_output(int)'的参数太少|

您已将prime_output 声明为int prime_output(int value),但您立即使用局部变量value 隐藏参数value。你最好把参数去掉,它对你没有任何好处。

main.cpp|52|错误:函数'int perfect_output(int)'的参数太少|

与上述相同的问题。不过,看起来您正在尝试直接修改参数,但您这样做是不行的。尝试使用参考:

int perfect_output(int& value)

这个函数本身很奇怪。您不输出任何内容或进行任何计算。我觉得你可能还没有写完。

main.cpp||在函数'void user_selection()'中:|
main.cpp|59|error: '{' token|

之前不允许有函数定义

这可能是您收到问题提到的错误的地方。您的格式很难直接看到这一点;幸运的是 Code::Blocks 告诉我问题出在哪里。

void user_selection()
{

你永远不会关闭它。 (更准确地说,你的右大括号一直在文件的末尾,它会触发 another 不匹配错误。)

main.cpp|87|error: '}' 标记之前的预期声明|

见上文。这是以某种方式与user_selection 分离的右大括号。尝试更加小心您的代码格式;越容易阅读,就越容易在编译器之前看到类似的内容。

main.cpp|63|error: ' 之前的预期主表达式

你的 if 语句的格式很奇怪。像这样将= &lt; 更改为&lt;=

for (i = 2; i <= 1000; i++)//if numbers are 1 off, make i = 1.

【讨论】:

  • 感谢您的帮助,我已经使用您上面描述的技术重新设计了程序,问题已被编辑以包含新代码。没有错误,这是令人鼓舞的,但程序仍然无法正确运行。我不认识错误的输出,所以我不确定从哪里开始故障查找过程。你能看到这段代码失败的地方吗??
  • 如果您的代码与上面发布的相同,我可以看到需要修复的六个地方。但是,我建议您提出一个新问题,因为您的编译错误(该问题的主题)已得到解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 2018-06-01
  • 1970-01-01
  • 2014-02-14
相关资源
最近更新 更多