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

