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

C语言程序运行输入数字后出现冻结故障的原因咨询

C代码故障原因及修复方案

程序冻结和int类型变量声明数量完全无关,故障由以下代码错误导致:

  • 致命错误(直接导致冻结):scanf调用未传入变量地址。C语言标准库的scanf要求接收输入的参数必须是变量的内存指针,你当前代码直接传递了未初始化的x1、y1等int变量值,系统会把这些随机垃圾值当成内存地址尝试写入,触发非法内存访问的未定义行为,直接表现就是程序崩溃、冻结。
  • 逻辑错误1:距离计算结果用int存储丢失精度。sqrt、pow返回值均为double浮点类型,直接赋值给int变量会自动截断小数部分,导致计算结果误差极大,建议将sstr1、sstr2、sstr3声明为double类型。
  • 逻辑错误2:第三个距离的计算参数错误。你代码中sstr3的计算复用了xstr1、ystr1参数,得到的还是点1到点2的距离,正确应该使用xstr3、ystr3计算点1到点3的距离。

修复后的完整代码

#include <stdio.h>
#include <math.h>

int main()
{
    int x1, x2, x3, 
        y1, y2, y3, 
        ystr1, ystr2, ystr3,  
        xstr1, xstr2, xstr3;
    double sstr1, sstr2, sstr3;

    printf("请依次输入三个点的x、y坐标,用空格分隔:");
    // 变量前加&取地址符
    scanf("%d%d%d%d%d%d", &x1, &y1, &x2, &y2, &x3, &y3);
    ystr1 = y2 - y1;
    xstr1 = x2 - x1;
    sstr1 = sqrt(pow(xstr1, 2) + pow(ystr1, 2));
    ystr2 = y3 - y2;
    xstr2 = x3 - x2;
    sstr2 = sqrt(pow(xstr2, 2) + pow(ystr2, 2));
    ystr3 = y3 - y1;
    xstr3 = x3 - x1;
    // 修正参数,用xstr3和ystr3
    sstr3 = sqrt(pow(xstr3, 2) + pow(ystr3, 2));
    // 浮点占位符输出,保留2位小数
    printf("三点两两距离分别为:%.2lf, %.2lf, %.2lf", sstr1, sstr2, sstr3);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:36:01