C语言酒店预订程序中harga值始终为0的问题排查及代码修正请求
C语言酒店预订程序
harga变量始终为0的问题排查与修正 常见问题原因
- 变量未初始化:
harga定义时未赋初始值,且所有分支未覆盖赋值逻辑,会默认取内存中的0值 - 分支逻辑覆盖不全:选择房间类型的分支中,部分情况(如套房、无效输入)未设置
harga的赋值语句 - 模块未调用导致赋值缺失:你提到暂未使用
pilih_kamar_pojok_atau_engga1模块,如果该模块负责给harga加价或赋值,跳过它会导致变量未被更新 - 变量作用域错误:若
harga是局部变量,在赋值的代码块外使用,会丢失正确值
修正示例代码
假设你原本的代码存在分支不全、未初始化问题,修正后代码如下:
#include <stdio.h> // 假设pilih_kamar_pojok_atau_engga1模块功能是获取是否选择角落房 void pilih_kamar_pojok_atau_engga1(int *is_pojok) { printf("Apakah kamar pojok? (1=Ya, 0=Tidak): "); scanf("%d", is_pojok); } int main() { int harga = 0; // 显式初始化默认值 int tipe_kamar; int is_pojok = 0; printf("Pilih tipe kamar (1=Standar, 2=Suite, 3=Ekonomis): "); scanf("%d", &tipe_kamar); // 覆盖所有房间类型分支的赋值 switch(tipe_kamar) { case 1: harga = 500000; break; case 2: harga = 800000; break; case 3: harga = 300000; break; default: printf("Tipe kamar tidak valid!\n"); harga = 0; // 兜底处理无效输入 return 1; } // 启用pilih_kamar_pojok_atau_engga1模块调整价格 pilih_kamar_pojok_atau_engga1(&is_pojok); if(is_pojok == 1) { harga += 150000; // 角落房统一加价 } printf("Harga kamar yang dipilih: %d\n", harga); return 0; }
核心修正要点
- 显式初始化
harga为默认值,避免未定义行为 - 用
switch或完整的if-else分支覆盖所有可能的输入情况,确保每种情况都有harga赋值 - 若需要
pilih_kamar_pojok_atau_engga1模块参与价格计算,调用该模块并通过指针传递参数来修改外部变量 - 检查变量作用域:确保
harga在需要使用的范围内保持有效(比如避免在子函数中定义后直接销毁)
内容的提问来源于stack exchange,提问作者XI MIPA 1 MICHAEL ELBERT JUSTI
相关产品推荐
相关产品推荐

