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
相关产品推荐
相关产品推荐

