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

C语言printf语句整数重复打印问题求助(Rack-O测试代码)

解决C语言未初始化变量引发的输出异常问题

问题描述

在复刻Rack-O游戏的测试代码中,第二个printf语句出现了看似“重复打印”的异常输出(例如输出523,其中52是sum2的有效值,3是sum1的垃圾值)。原因是sum1和sum2仅在用户选择对应选项时才被赋值,未初始化的变量会保留内存中的垃圾值,导致输出混乱。

解决方案

核心是初始化变量,同时优化冗余代码、修正输出格式:

  • 初始化sum1和sum2为对应初始牌值,确保未修改时输出正确的初始状态
  • 简化赋值逻辑,去掉无意义的计算
  • 给第二个printf添加换行符,避免输出内容粘连

修改后的完整代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <string.h>

int main(){
    int game = 1;
    srand(time(0));
    const int MIN = 1;
    const int MAX = 60;
    int starting_numbers10 = (rand() % MAX) + MIN;
    int starting_numbers9 = (rand() % MAX) + MIN;
    // 初始化sum1和sum2为初始牌值
    int sum1 = starting_numbers10;
    int sum2 = starting_numbers9;

    while(game == 1){
        int gamecards = (rand() % MAX) + MIN;
        int start;

        printf("%d\n", gamecards);
        printf("do you want to change numbers 1 or 2 : ");
        scanf("%d", &start);

        if(start == 1){
            // 简化赋值逻辑
            sum1 = gamecards;
        }
        else if(start == 2){
            // 简化赋值逻辑
            sum2 = gamecards;
        }
        printf("1 new sum: %d\n", sum1);
        // 添加换行符,避免输出粘连
        printf("2 new sum: %d\n", sum2);
    }
}

说明

  • 初始化变量后,无论用户选择修改哪个值,未被修改的变量都会输出正确的初始值,不会再出现垃圾值
  • 简化后的赋值逻辑更清晰,避免不必要的计算
  • 换行符确保每次输出都单独成行,彻底解决内容粘连的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:37:43