关于幂函数的重载实现

问题遇到的现象和发生背景

img

问题相关代码,请勿粘贴截图

#include<stdio.h>
#include<math.h>

void fun(int *x, int *n,int *s)
{
*s = pow(*x, *n);
}

void fun(char* b,int *n,char *m)
{
int i;
for (i = 0; i < *n; i++)
{
printf("%c", *b);
}
}

int main()
{
int a, x, n;
char b;
int s = 0;
char m = 'a';
scanf("%d", &a);
if (a == 1)
{
scanf("%d%d", &x, &n);
fun(&x, &n, &s);
printf("%d", s);
}
if (a == 2)
{
scanf("%c%d", &b, &n);
fun(&b,&n,&m);
}
return 0;
}

运行结果及报错内容

我把第二小题的代码删去后可以运行正确,请问一下我哪里出错了?

我的解答思路和尝试过的方法
我想要达到的结果

我试了一下,代码编译可以通过,只是a == 2得不到正确结果
scanf("%c%d", &b, &n);多次读取不到字符

办法是

int main()
{
int a, x, n;
char b;
int s = 0;
char m = 'a';
scanf("%d\n", &a);//加\n  刷一下缓冲区
if (a == 1)
{
scanf("%d%d", &x, &n);
fun(&x, &n, &s);
printf("%d", s);
}
if (a == 2)
{
scanf("%c%d", &b, &n);
fun(&b,&n,&m);
}
return 0;
}