You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言if条件块搭配printf和scanf运行异常是什么原因?

问题排查与修复方案

首先明确:C语言的if条件分支中使用任意数量的printf、scanf函数都没有限制,你的代码运行异常完全是编码错误导致,具体问题如下:

  • scanf传参未加取地址符&,共2处:
    • 读取选择值n的代码scanf("%f", n);需改为scanf("%f", &n);,未传地址的情况下输入的选择值无法写入变量n,n为随机值会导致if判断无法命中预期分支
    • 读取i值的代码scanf("%f", i);需改为scanf("%f", &i);
  • 格式符与读取变量数量不匹配:n==3分支下读取坐标的代码scanf("%f", &x2, &y2);需要读取两个float值,仅写了一个%f,需改为scanf("%f %f", &x2, &y2);
  • 浮点数绝对值函数使用错误:n==3分支中计算y差值平方的绝对值用了int类型对应的abs()函数,会强制截断浮点数导致精度丢失,需替换为浮点数专用的fabs()函数
  • 逻辑错误:n==2分支中,你需要分别计算正负值对应的结果,但两行sqrt的参数完全相同,都为减去i,负数版本应该改为加i,否则两次输出结果完全一致
  • 潜在风险:sqrt()的参数如果为负数会返回NaN导致结果异常,建议开根号前先判断被开方数是否大于等于0,异常时给出提示
  • 优化建议:选择值n为整数,用int类型定义更合适,可避免浮点数相等判断的精度问题

修正后完整代码

#include <stdio.h>
#include <math.h>
int main()
{
    int n;
    float PO, x1, x2, y1, y2, i, POO, temp;
    printf("这是几何轨迹计算器,请输入坐标,x和y之间用空格分隔:");
    scanf("%f %f", &x1, &y1);
    printf("请输入选项:1 输入另一个坐标,2 输入正负数值,3 对应直线计算:");
    scanf("%d", &n);
    if (n == 1)
    {
        printf("请输入第二个坐标,x和y之间用空格分隔:");
        scanf("%f %f", &x2, &y2);
        printf("现在计算两点之间的距离:\n");
        PO = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
        printf("两点之间的距离为:%f\n", PO);
    }
    else if (n == 2)
    {
        printf("请输入第二个坐标,x和y之间用空格分隔:");
        scanf("%f %f", &x2, &y2);
        printf("请输入绝对值数值:");
        scanf("%f", &i);
        printf("现在计算对应距离:\n");
        temp = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
        PO = sqrt(temp - i);
        printf("取正值对应的结果为:%f\n", PO);
        POO = sqrt(temp + i);
        printf("取负值对应的结果为:%f\n", POO);
    }
    else if (n == 3)
    {
        printf("请输入第二个坐标,x和y之间用空格分隔:");
        scanf("%f %f", &x2, &y2);
        printf("现在计算对应距离:\n");
        temp = (x2 - x1) * (x2 - x1) - fabs((y2 - y1) * (y2 - y1));
        if(temp < 0) {
            printf("被开方数为负,计算结果无效\n");
            return 1;
        }
        PO = sqrt(temp);
        printf("计算结果为:%f\n", PO);
    }
    else {
        printf("输入选项无效\n");
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Juanita Saavedra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:24:00