小白求大神,一个课程表程序的循环没办法执行不知道为什么

这是不循环的时候,没错误。
#include
int main()
{
printf("输入课程的首字母加空格加星期几加第几节到第几节,如数学周三第6到8输入m 3 6 8\n");
char f[9][7]={'1','2','3','4','5','6','7'},d;
int a,b,c,e,g=1;

scanf("%c%d%d%d",&d,&a,&b,&c);

for(e=b-1;e<=c-1;e++)
    f[e+1][a-1]=d;

for(a=0;a<=8;a++)
{
    printf("\n");
    printf(" %d",a);
    for(b=0;b<=6;b++)
        printf("%5c",f[a][b]);
}

}
上面是只能输入一次的程序改成下面这样能循环输入并且输入!结束的程序后,出错,不知道哪里错

#include
int main()
{
printf("输入课程的首字母加空格加星期几加第几节到第几节,如数学周三第6到8输入m 3 6 8\n");
char f[9][7]={'1','2','3','4','5','6','7'},d;
int a,b,c,e,g=1;
do{

scanf("%c%d%d%d",&d,&a,&b,&c);
if(d=='!')
{
    g=0;break;
}

for(e=b-1;e<=c-1;e++)
    f[e+1][a-1]=d;
}while(g);

for(a=0;a<=8;a++)
{
    printf("\n");
    printf(" %d",a);
    for(b=0;b<=6;b++)
        printf("%5c",f[a][b]);
}

}

#include
int main()
{
printf("输入课程的首字母加空格加星期几加第几节到第几节,如数学周三第6到8输入m 3 6 8\n");
char f[9][7]={'1','2','3','4','5','6','7'},d;
int a,b,c,e,g=1;
do{
scanf("%c%d%d%d",&d,&a,&b,&c);
getchar();
if(d=='!')
{
g=0;break;
}

for(e=b-1;e<=c-1;e++)
f[e+1][a-1]=d;
}while(g);

for(a=0;a<=8;a++)
{
printf("\n");
printf(" %d",a);
for(b=0;b<=6;b++)
printf("%5c",f[a][b]);
}
}

回车符也是char所以要吃掉输入栈中的回车,不过这样做还是不太对,结束条件必须要输入3个值所以需要修改一下条件

搞Java的,不过我好像记得 int main()的话需要一个 return 0 吧;