随手写了一个验证2147483647是不是质数的,不过脑的代码,居然编译报错。
代码如下:

# include <math.h>  
int main(void){  
    int num = 2147483647;  
  
  
    for(int i = 2; i < (int)sqrt(2147483647); i++){ 
        if (num%i == 0)  
            return -1;  
    }  
    printf("2147483647是一个质数");  
    return 0;  
}  

我猜测应该是int i 的问题,故

把for里的 int i 单独放一行,如下:

int i;
for (i = 2; i <(int)sqrt(2147483647); i++)

就OK了,表示不解。


以前一直用第一种写法都没报错,可能以前只是用i来控制循环而已。

 

看有一个解读是:第一个,i的作用域在for内;第二个,i的作用域出来了。

深以为然。