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

C语言简易射击判定程序输出异常:仅输出0无预期结果求助

问题分析与修复方案

嘿,我一眼就瞅到了你代码里的关键问题,这也是新手常踩的典型坑!

1. 运算符误用导致距离计算完全错误

你在distance函数里用了^来计算平方,但C语言里的^是按位异或运算符,根本不是幂运算!这会让你得到完全离谱的距离值,自然射程判断逻辑根本起不了作用,程序只能输出默认的0。

修正后的distance函数:

#include <math.h>

double distance(int y, int r, int u, int t) {
    // 用乘法计算平方(效率比pow()更高,也避免浮点精度问题)
    int dx = u - y;
    int dy = t - r;
    return sqrt(dx * dx + dy * dy);
}

2. 补全can_hit函数的判断逻辑

你代码里的do...部分没写完,得确保计算出距离后,和对应类型的射程做比较,更新hit的值:

int can_hit(int x_0, int y_0, int x_1, int y_1, char kind) {
    int m_range = 17;
    int b_range = 35;
    int hit = 0;
    double dist = distance(x_0, y_0, x_1, y_1);
    
    // 根据类型判断是否在射程内
    if ((kind == 'm' && dist <= m_range) || (kind == 'b' && dist <= b_range)) {
        hit = 1;
    }
    return hit;
}

3. 确保输入变量正确初始化

在main函数里,你提到p,o,k,l,kind1是从用户输入获取的,得确保用scanf之类的函数正确读取,不然变量值会是随机垃圾值,也会导致判断错误:

#include <stdio.h>
#include <conio.h> // 如果你用的是_getch()

int main() {
    int p, o, k, l;
    char kind1;
    
    // 读取用户输入
    printf("输入四个坐标值和类型(m/b):");
    scanf("%d %d %d %d %c", &p, &o, &k, &l, &kind1);
    
    int result = can_hit(p, o, k, l, kind1);
    printf("%d", result);
    _getch();
    return 0;
}

把这些修改整合后,程序就能正确判断目标是否在射程内,输出1或者0了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:19:10