我写了一个小程序,但它给出的答案总是错的,这是代码
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的值,它得到一个随机的巨大数字,而我不知道为什么。有什么想法吗?
答案 0 :(得分:2)
您scanf
的格式错误; %d
用于十进制整数。您希望%lf
获得double
。
那就是说,你为什么不使用C ++风格的I / O,即<iostream>
,cout
,cin
等?这看起来像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
的定义,而您没有费心去做告诉我们。
这和我现在愿意做的调试一样多。修复这些错误,然后重试。