请问这个代码哪里错了找了很久找不到,用纸笔模拟也看不出,刚学c语言,一直卡题,能不能在此代码的基础上说我哪里错了

能否在下面的代码基础上指出哪里错误和哪里需要改进?是思路上错了还是语法上?纸笔也没模拟出来。。谢谢
问题描述:
给了我们很多张张星空图,让我们比谁能更快查出每张图有多少的星星,学姐想到编一个程序解决这个问题,你能帮他解决吗?
输入格式

输入多组数据
对于每一组数据: 第一行:N,M(0 < N <= 200,0 < M <= 200)代表这个星空图的行数和列数。 第二行至第N+1行:每行M个字符,‘*’表示是星星,‘_’表示不是星星。 当M=N=0时输入结束。
输出格式

对于每一组数据: 第一行:星空图中星星的个数

样例

样例输入

3 4
__*_
_*__
*__*
4 5
___**
**___
__**_
*_*_*
0 0

样例输出

4
9

下面是我的答案和编译运行结果:


#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
int main() {
    int n,m;
    char a[n*m+5];
    scanf("%d %d",&n,&m);
    while(n!=0||m!=0) {
        int count=0;
        for(int i=0; i<n; i++) {
            for(int i=0; i<m; i++) {
                scanf("%c",&a[i]);
                if(a[i]=='*') {
                    count++;
                }
            }
        }
        printf("%d\n",count);
        scanf("%d %d",&n,&m);
    }
    return 0;
}

用编译器编译运行结果:

3 4
__*_
_*__
*__*
3
4 5
___**
2
**___
__**_
5
*_*_*
0 0
3

你把第二个for循环的i改成j,while循环里的 || 最好也改成&&