如何修复C++编写的0-100猜数字游戏运行2次就终止的问题
注:代码为瑞典语编写
问题原因
- 缺少循环逻辑:当前代码的判断逻辑仅顺序执行一次,最多只会收集2次用户输入就直接结束,无法持续响应猜数操作直到用户猜对
- 随机数生成逻辑错误:
nyttal函数传入的区间参数n未被使用,当前返回的随机数范围并不是预期的0~100区间
修复后代码
// 生成0~n区间的随机数 int nyttal(int n){ return rand() % (n + 1); } //Lak Lägg void utforEnSpelomgang(){ const int n = 100; const int datornstal = nyttal(n); int antalUtfardaGissningar = 0; // 用户的猜测次数 int g = -1; // 初始化猜测值,保证不等于0~100区间的目标值 cout << "Datorn tänker på ett tal mellan noll och " << n << ". Gissa vilket!" << endl; // 未猜对则持续循环 while (g != datornstal) { cin >> g; antalUtfardaGissningar++; if(g < datornstal){ cout << "Mindre" << endl; cout << "Antal utfärde gissningar: " << antalUtfardaGissningar << endl; } else if(g > datornstal){ cout << "Större" << endl; cout << "Antal utfärde gissningar: " << antalUtfardaGissningar << endl; } else { cout << "Du gissade rätt" << endl; cout << "Antal utfärde gissningar: " << antalUtfardaGissningar << endl; } } //Lägg }
核心修改说明
- 新增
while循环包裹猜数、判断全流程,只要用户猜测值不等于目标值就持续运行 - 修正
nyttal函数逻辑,根据传入的参数n生成对应区间的随机数 - 调整计数逻辑位置,每次用户输入后统一计数,避免重复代码
- 把并列
if改为else if分支,减少不必要的重复判断
额外提示:如果需要每次运行程序生成的目标数字不重复,可在程序入口main函数的最开头添加随机数种子初始化代码:srand((unsigned int)time(NULL));
并引入对应头文件#include <time.h>。
内容的提问来源于stack exchange,提问作者Ahmad Halabi
相关产品推荐
相关产品推荐

