Ваш код работает более или менее, как ожидалось:
Вывод может выглядеть примерно так: (// это мои комментарии, а не часть вывода)
[i] : 10000 // 100 * 100
[i] : 100000000 // 10000 * 10000
[i] : 1874919424 // 100000000 * 100000000 (int overflow)
[i] : 0 // 1874919424 * 1874919424 (int overflow resulting in 0)
[i] : 0 // from now on you only get 0, because 0 * 0 = 0
[i] : 0
[i] : 0
[i] : 0
[i] : 0
[i] : 0
int
переполнение дает неопределенное поведение, и результат на вашей платформе может быть другим.
Попробуйте эту слегка измененную версию вашей программы, она выполняет только 10 циклов.
#include <stdio.h>
int main() {
int i = 100;
for (int count = 0; count < 10; count++)
{
i *= i;
printf("[i] : %d\n", i);
}
return 0;
}