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

为什么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 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀