所以在c中我试图创建一个上升到数字平方根的for循环, 但我需要将该平方根定义为int类型,因为控制语句不能有双重类型。
基本上我所做的是将int1
定义为int
类型,然后int1=sqrt(n);
。
但是,编译器不接受它。救命? 这是我的整个代码(这是Eratosthene筛子的算法)
答案 0 :(得分:4)
我没有看到任何错误。向我们展示您的错误并阅读它们,因为例如我看到您在循环中使用j
并且它从未声明过。您认为此代码应该做什么?
int n, primecap[n], int1, i;
n=50;
initArray(primecap[n]);
你的问题是你不知道自己在写什么。
答案 1 :(得分:3)
int int1 = sqrt(n);
这在标准C中完全有效,您的编译器应该接受它。 要么在编译器中启用了一些挑剔的警告选项,要么错误在程序的其他位置。
(我假设你包含math.h
而n
属于算术类型。)
答案 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上尝试了你的代码,除了缺少标题和未声明的标识符(j
,primecap
)之外,编译器没有抱怨(关于这个特定的事物)。
答案 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);