zhanjunlihai 2023-11-04 16:57 采纳率: 24.7%
浏览 1

%d 输入0 VC系统进项不下去

在单步运行的时候系统输入 3 0 或者0 3 都无法进行 为什么呢
可是没什么语法错误
f10,然后 到 temp=a>b?b:a; 这一句无法执行,3 0 无法赋值到 a b 这是为什么呢


#include<stdio.h>
int main()
{
 int a,b,m,temp;
 printf("请输入两个数\n");
 scanf("%d%d",&a,&b);
 temp=a>b?b:a;
 for(m=temp; m>=1; m--)
     if(a%m==0 && b%m==0)
          break;
printf("最大公约数是%d,最小公倍数是%d\n",m,a*b/m);
return 0;
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-04 18:51
    关注

    【以下回答由 GPT 生成】

    问题的原因是由于输入0赋值给变量a和b时,程序的执行逻辑导致了错误。在这段代码中,变量a、b、m和temp的类型都是int,而输入0时,会被视为false,即不满足a>b的条件,所以会执行temp=a,即将输入的值赋给了变量a。

    解决这个问题的方法是,需要对输入进行额外的判断,确保输入的值是符合要求的。

    以下是解决这个问题的示例代码:

    #include<stdio.h>
    
    int main() {
        int a, b, m, temp;
    
        printf("请输入两个数\n");
    
        if (scanf("%d %d", &a, &b) != 2) { // 判断输入是否成功
            printf("输入格式错误,请重新输入两个整数\n");
            return 1;
        }
    
        temp = a > b ? b : a;
    
        for (m = temp; m >= 1; m--) {
            if (a % m == 0 && b % m == 0) {
                break;
            }
        }
    
        printf("最大公约数是%d,最小公倍数是%d\n", m, a * b / m);
    
        return 0;
    }
    

    解决方法是在输入部分加入判断,使用scanf函数返回值(成功读取并赋值的参数个数)来进行判断。如果输入的参数个数不是2,则输出错误提示,并结束程序。

    此时,输入0后可以正常赋值给变量a和b,问题得到解决。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月4日