计算圆上的整点

时间:2011-10-26 21:44:36

标签: c++ geometry

我写了一个小程序,但它给出的答案总是错的,这是代码

double radiusc;
double xcenter;
double ycenter;

bool onthecircle(int x,int y);


int main(void)
{
    int inputwait;

    printf("Please enter x coordinate of your center point: ");
    scanf("%d",&xcenter);

    printf("Please enter y coordinate of your center point: ");
    scanf("%d",&ycenter);

    printf("Please enter the radius of the circle: ");
    scanf("%d",&radiusc);

    double left_x = xcenter - radiusc;
    double left_y = ycenter;

    double down_x = xcenter;
    double down_y = ycenter - radiusc;

    if(left_x >= floor(left_x))
    {
        left_x = floor(left_x);
        int (left_x);
    }
    else
    {
        left_x = floor(left_x) + 1;
        int (left_x);
    }

    for(left_x; left_x<=xcenter; left_x++)
    {
        for(left_y;left_y>ycenter-radiusc;left_y--)
        {
            if(onthecircle(left_x,left_y))
                printf("Jest na kole: %d , %d \n", left_x,left_y);
        }
    }

    scanf("%i",&inputwait);

    return 0;
}

bool onthecircle(int x,int y)
{
    double t1= x - xcenter;
    double t2 = x - ycenter;

    if ((t1*t1 + t2*t2) > (0,9 *radiusc*radiusc) &&
        (t1*t1 + t2*t2) < (1,1 *radiusc*radiusc))
        return 1;
    else
        return 0;

}

当我调试时,键入0,0作为我的中心并且r = 1,它给出了0和一些大数字,而不是保存1作为r的值,它得到一个随机的巨大数字,而我不知道为什么。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

scanf的格式错误; %d用于十进制整数。您希望%lf获得double

那就是说,你为什么不使用C ++风格的I / O,即<iostream>coutcin等?这看起来像C和C ++的丑陋混合。

答案 1 :(得分:2)

除了Ed发现的问题,0,9不是有效的浮点常数;你想要0.9。 (区域设置可能会影响输入和输出表示;它们不会影响语言语法。)

(0,9 *radiusc*radiusc)中的逗号是逗号运算符,不是小数点;你将半径的平方乘以9。

你错过了#include <stdio.h>#include <math.h>(对于程序顶部的floor()(你的编译器可能会让你逃脱它,但它不是可选)。

printf来电的格式不正确;你需要"%f""%g"来表示“双倍”。

更多:

使用double作为循环控制变量是值得怀疑的。在没有提示的情况下终止程序之前等待输入的调用scanf("%i",&inputwait);是用户敌对的。无需使用全局变量。我不知道int (left_x); 应该做什么;我认为它被解析为一个声明(你永远不会使用的变量),并且括号是多余的。您对类型名称bool的使用意味着您要将代码编译为C ++,或者您有#include <stdbool.h>bool的定义,而您没有费心去做告诉我们。

这和我现在愿意做的调试一样多。修复这些错误,然后重试。