i が for ループで定義されている場合、次が機能しないのはなぜですか
#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
、なぜですか?