这种特殊情况下结束循环应该怎么做,我这个代码是有问题 的吗?我自己看似乎逻辑上没错啊,大佬们看一下,指导指导

这里是一直循环输入计算公约数,当计算完后提示是否继续,输入 n 退出,否则继续,但是我这个每次都是直接跳开头,没有输字符环节,为什么?
#include

int main(void)
{
int a,b,c;
char ch;

while(1)
{
    printf("请输入2个整数:");
    scanf("%d%d",&a,&b);
    c = a;
    while(a%c != 0 || b%c != 0)
    {
        c--;
    }
    printf("%d和%d的最大公约数是:%d",a,b,c);

    printf("你要继续计算吗?\n y or n\n");      //输入n时停止程序,否则继续,这个有输出
    scanf("%c",&ch);              //上一步直接接开头请输入整数那里,这一步没有,直接跳回开头了

    if (ch == 'n')
        break;
}
return 0;

}
图片说明

在 %c 前面加一个空格,可以解决这个问题

scanf(" %c",&c);

因为在进行输入时候,会以回车符作为结束,前面有输入的情况下,回车符会存在缓存里面。
当你使用 scanf("%c",&c); 时,(不加空格的情况下)会默认将回车符读入,从而跳过了让你输入 y/n 的过程。
加个空格之后,可以利用格式化的输入,跳过第一个字符。

scanf("%c",&ch); 前面加上
fflush(stdin);
试试看

看循环结束条件是输入字符 n ,输入 n 不能结束吗?