在C中将sqrt定义为int类型?

时间:2012-02-13 16:14:54

标签: c

所以在c中我试图创建一个上升到数字平方根的for循环, 但我需要将该平方根定义为int类型,因为控制语句不能有双重类型。

基本上我所做的是将int1定义为int类型,然后int1=sqrt(n);

但是,编译器不接受它。救命? 这是我的整个代码(这是Eratosthene筛子的算法)

http://pastebin.com/V6cHqj4F

7 个答案:

答案 0 :(得分:4)

我没有看到任何错误。向我们展示您的错误并阅读它们,因为例如我看到您在循环中使用j并且它从未声明过。您认为此代码应该做什么?

int n, primecap[n], int1, i;
n=50;
initArray(primecap[n]);

你的问题是你不知道自己在写什么。

答案 1 :(得分:3)

int int1 = sqrt(n);

这在标准C中完全有效,您的编译器应该接受它。 要么在编译器中启用了一些挑剔的警告选项,要么错误在程序的其他位置。

(我假设你包含math.hn属于算术类型。)

答案 2 :(得分:1)

你也可以考虑

int int1 = (int)(lround(sqrt(n));

请注意,这里有一些关于游戏类型的假设,但这应该对你有用。

鉴于 sqrt()函数的性质,您甚至可以考虑将 lround()的结果分配为未分级数据类型(即 unsigned long 等。)

答案 3 :(得分:1)

  

所以在c中我试图创建一个上升到数字平方根的for循环,但我需要将该平方根定义为int类型,因为控制语句不能有双重类型。

废话,你可以在for和while循环结构中使用任何类型。

  

int1定义为int类型,然后int1=sqrt(n);

完全可以。

  

但是,编译器不接受它

我在ideone上尝试了你的代码,除了缺少标题和未声明的标识符(jprimecap)之外,编译器没有抱怨(关于这个特定的事物)。

答案 4 :(得分:1)

如果this是您的代码int n, primecap[n], int1, i;,则您的问题可能是primecap[n],因为稍后会定义n

答案 5 :(得分:0)

如果你真的只想要一个整数:

int1 = (int) sqrt(n);

答案 6 :(得分:0)

您只需将sqrt()的结果投射到int

即可
int int1 = (int) sqrt(n);