为什么以下不是当它被定义时,我在被定义为循环INT I for循环VS不
#include <stdio.h>
#include <math.h>
int N;
long long int H() {
long long int ans=0;
int i, lt;
if(N <= 0)
return 0;
for(i=1, lt=sqrt(N); i<=lt; i+=1) /* if i=1 is replaced by int i=1 => garbage */
ans+=(N/i);
ans = 2*ans-(lt*lt);
return ans;
}
int main() {
scanf("%d",&N);
printf("%lld\n",H());
return 0;
}
输出,当它在顶部
Input: 8
Output: 20
输出的已定义工作在for循环/* for (int i=1 ..) */
Input: 8
Output: 1243068212
我看到,我得到一个警告lt is initialized when used here
,为什么呢?
+1。乍一看,问题可能似乎是C++风格“int i”。但实际上,它是表达式'int i = 1,lt = sqrt(N)',它创建了两个* NEW *变量“i”,* AND *“lt”。 – paulsm4
@ paulsm4:这不是一个“表达”。这是一个声明。 – AnT
该声明* IS *表达式。 “表达式是用于一个或多个这些目的的操作符和操作数的序列。” – paulsm4