免费的猫 2022-07-02 16:58 采纳率: 100%
浏览 42
已结题

为什么if判断为真,但不执行if里的语句啊

以下代码 输入值是24 18 执行后 判断if ((a % c) == 0 && (b % c) == 0)为真,此时c==6,但没有打印c的值,谢谢了~!
按了F10查看值,就是直接跳过打印的部分了

#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d %d",&a,&b);
if (a < b)
{
c = a;
for (;(a % c) != 0 && (b % c) != 0;c -= 1)
{
if ((a % c) == 0 && (b % a) == 0)
printf("%d", c);
break;
}
}
else if(a>b)
{
c = b;
for (;(a % c) != 0 || (b % c) != 0;c -= 1)
{
if ((a % c) == 0 && (b % c) == 0)
{
printf("%d", c);
break;
}
}
}
return 0;
}

  • 写回答

3条回答 默认 最新

  • it_hao528 2022-07-02 18:13
    关注

    因为if判断在for循环中
    第一个for循环因为c=a,所以在第一次进行判断时a%c==0循环条件不成立退出循环,故不会走循环内部方法。
    第二个for循环条件与内部if判断刚好相反,所以只要能进入循环,if条件肯定不会成立,当((a % c) == 0 && (b % c) == 0)为真时for循环条件为假,推出循环,也就不会执行循环内部的if判断。你这看着像是求两个数的最小大公因数的,if判断需要放到循环下边来判断,且两个for循环的条件应该一致且第二个的是正确的,建议修改如下:

    int main()
    {
    int a = 0;
    int b = 0;
    int c = 0;
    scanf("%d %d",&a,&b);
    if (a < b)
    {
      c = a;
    }
    else if(a>b)
    {
      c = b;
    }
    for (;(a % c) != 0 || (b % c) != 0;c -= 1){}
    
    if ((a % c) == 0 && (b % c) == 0)
    {
      printf("%d", c);
    }
      return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月12日
  • 已采纳回答 7月4日
  • 创建了问题 7月2日

悬赏问题

  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解
  • ¥15 有偿请教计算电磁学的问题涉及到空间中时域UTD和FDTD算法结合的
  • ¥15 three.js添加后处理以后模型锯齿化严重