如何用单个循环处理两个变量的空格输出需求?
单个循环实现双玩家空格输出的方案
当然可以用单个循环替代两个独立循环,具体实现取决于你的空格输出场景:
场景1:两个玩家的空格连续输出
如果玩家1和玩家2的空格是连续输出(中间无其他内容),直接计算总空格数,用一个循环输出即可:
// 计算两个玩家各自需要的空格数 string::size_type s1 = (SIZE - p1.name.length()) / 2; string::size_type s2 = (SIZE - p2.name.length()) / 2; // 单个循环输出所有空格 for (string::size_type i = 1; i <= s1 + s2; ++i) { cout << " "; }
场景2:两个玩家的空格需搭配各自内容输出(如名字)
如果空格后需要输出对应玩家的名字或其他内容,可将玩家的空格需求封装后,用单个循环遍历处理:
// 定义玩家的空格需求和名字(也可直接用现有p1、p2变量) struct PlayerData { string name; string::size_type spaceCount; }; PlayerData players[] = { {p1.name, (SIZE - p1.name.length()) / 2}, {p2.name, (SIZE - p2.name.length()) / 2} }; // 单个循环处理两个玩家的空格+内容输出 for (const auto& player : players) { // 输出当前玩家的空格 for (string::size_type i = 1; i <= player.spaceCount; ++i) { cout << " "; } // 输出玩家名字(按需添加其他内容) cout << player.name << endl; }
场景3:无嵌套循环的实现
如果想完全避免两个独立的顶层循环,也可以用单个循环变量分阶段处理:
string::size_type s1 = (SIZE - p1.name.length()) / 2; string::size_type s2 = (SIZE - p2.name.length()) / 2; string::size_type i = 1; // 第一阶段:输出玩家1的空格 for (; i <= s1; ++i) { cout << " "; } // 这里可插入玩家1的名字等内容,比如 cout << p1.name << endl; // 第二阶段:继续用同一个循环变量输出玩家2的空格 for (; i <= s1 + s2; ++i) { cout << " "; } // 这里可插入玩家2的名字等内容,比如 cout << p2.name << endl;
内容的提问来源于stack exchange,提问作者Alexis
相关产品推荐
相关产品推荐

