学校の宿題をやっているのでが、分からない所があるので質問します。

1!+2!+3!+・・・+n!和が7777より小さい場合における最大のnと、
その時の和を求めるプログラムをfor文を用いて作成せよ。

という問題なのですが、とりあえず

int wa=0;
for(int n=1;wa<7777;n++){
int m=1;
for(int i=n;i>=1;i--){
m=m*i;
}
cout << "階乗は" << m << "\n";
wa=wa+m;
cout << "和は" << wa << "\n";
}
cout << "最大のnは" << n-1 << "\n";
cout << "その時の和は" << wa-m << "\n";

と記述して実行しようとしたら「cout << "その時の和は" << wa-m << "\n";」の部分で
「mが未定義です」とエラーが表示されてしまいました。for文内で定義した関数は
for文外では使用できないのでしょうか?
また、その部分を無視して実行した時、なぜか最大のnの値が9と表示されてしまいます。。
試しにfor文内にcout文を入れて実行してみたら正しくnの値は8と表示されるのですが。。
なぜこの違いが発生するのでしょうか・・・。
長くなりましたがどなたか教えてください。。