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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:30:01