yjl1023 2019-10-24 21:56 采纳率: 100%
浏览 254
已采纳

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

这里是一直循环输入计算公约数,当计算完后提示是否继续,输入 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;

}
图片说明

  • 写回答

3条回答 默认 最新

  • 机灵鹤 Python领域新星创作者 2019-10-25 09:58
    关注

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

    scanf(" %c",&c);
    

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器