疑問に思ったことです

while(scanf("%d",&a)!=EOF)

これは『^Dが「入力されない間」繰り返す』ってことですよね…
(ここがすでに自信ないんですけど)

これを for でやってみようと思って

for(i=1; i<100; i++)   /* 仮に百回繰り返すことにして */
{
  scanf("%d",&a);
  if(a==EOF) break;
}
  
としてみた所、いくら^Dを入れてもループを抜けなくなりました。
んで、ためしに

  scanf("%d",&a);
  printf("a = %d",a);
  if(a==EOF) break;

としてみて、「a」に格納された数値を出力して見れるようにしてみて、
実行してaに^Dを入力すると、

a=10640000 (間違ってると思いますけどこんな感じの数字)

とでて来ました。EOFってたしか -1 ですよね。
これだったらたしかにif(a==EOF) break;にしても、^D(=1064000)
とEOF(=-1)は等しくならないから、if=「真」 にはならなくて、breakしないのはわかります。
でも上の while(scanf("%d"),&a!=EOF) で^Dを入れたらループを抜けるのは
^D!=EOFでwhileが「偽」、つまり^D==EOFになるからループを抜けるんですよね

なぜfor〜if() breakに書き換えた時に^d=1064000になって、ループを抜けれなくなたのでしょうか
ただのコンパイラのエラー?