C语言格式转换的一些问题

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

为什么运行这段代码后,从键盘输入非数字后,程序可能会无限循环呢?

问题相关代码,请勿粘贴截图
#include 
int main(void)
{
    int n;
    printf("\nEnter n:\n");
    scanf("%d",&n);
    printf("%d%c",n,n);
    while(n!=0){
        printf("\nEnter n:\n");
        scanf("%d",&n);
        printf("%d%c",n,n);
    }
    return 0;
}
运行结果及报错内容

例如输入65,会输出65A,输入66会输出66B,但是输入非数字字符后,程序可能会无限循环,如输入+,输出11343332,再输入A,无限循环输出11343332。

我的解答思路和尝试过的方法

所以字符格式强制转换为int格式的方式是什么呢?为什么这里不起作用?

我的理解是这样的,scanf函数会开始读取输入字符,期望遇到数字字符或者是+,-,如果发现一个数字符号会将其保存放到缓存区,如果接下来还是数字符号继续保存再读取,一直持续下去,如果遇到非字符会认为当前输入结束,但这个字符他依旧也会放到输入缓存区,下次程序开始读取输入时,还是会再这个非数字字符开始读取,所以你输入非法字符后,后续会一直陷入循环

根据我的断点调试发现你这个输入+号时n并没有改变呃

首先你的输入:

scanf("%d",&n);

是定义int输入,那说明你输入的正确格式是输入整数,你输入非数字字符,那就是输入格式错误,会导致输入错误;
其次,你输入65,为什么输出是65A,那是因为你的输出格式有两个,一个是输出int类型,一个是输出char类型,输出65就很容易理解了,那么A输出是因为65可以算是ASCII65为A;你可以多试几次输入对照这ASCII表,体会输出的变化!