应该不是无中生友吧
为了实现一个简易电梯程序,代码将基于你的描述来创建一个可以接受输入并更新电梯状态的程序。
代码中使用 SetConsoleCursorPosition 函数(类似你提到的 SetCursorPos)来在命令行界面上定位输出。
SetConsoleCursorPosition 是 Windows 特有的函数,所以请确保你在 Windows 系统上使用这个程序。
include <stdio.h>
include <windows.h> // 包含用于控制台操作的函数
define MAX_FLOORS 10
define MAX_PEOPLE 10
// 用来存储每层楼当前的人数
int floors[MAX_FLOORS];
// 函数声明
void initializeFloors();
void printElevator();
void addPeople(int floor, int count);
COORD coord = {0,0}; // 全局坐标变量
int main() {
int floor, people;
initializeFloors(); // 初始化楼层数据
printElevator(); // 显示电梯初始状态
while (1) {
printf("输入楼层和人数 (格式:楼层 人数):");
scanf("%d %d", &floor, &people);
if (floor < 1 || floor > MAX_FLOORS || people < 0 || people > MAX_PEOPLE) {
printf("无效输入。请重新输入。\n");
continue;
}
addPeople(floor - 1, people); // 加人到电梯
printElevator(); // 更新电梯显示
}
return 0;
}
void initializeFloors() {
for (int i = 0; i < MAX_FLOORS; i++) {
floors[i] = 0;
}
}
void printElevator() {
system("cls"); // 清屏
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); // 获取控制台句柄
for (int i = MAX_FLOORS - 1; i >= 0; i--) {
coord.X = 0;
coord.Y = MAX_FLOORS - i;
SetConsoleCursorPosition(h, coord);
printf("%2d楼 - ", i + 1);
for (int j = 0; j < floors[i]; j++) {
printf("A"); // 假设所有人都用A表示
}
printf("\n");
}
}
void addPeople(int floor, int count) {
// 保证电梯不超载
if (floors[floor] + count > MAX_PEOPLE) {
printf("超出最大人数限制。\n");
} else {
floors[floor] += count;
}
}
代码说明
- 1. 初始化电梯层: 我们有一个数组 floors 来存储每层楼的人数。
- 2. 打印电梯状态: printElevator 函数使用了 SetConsoleCursorPosition 来定位输出,从而模拟电梯的各层状态。
- 3. 添加人员: 用户输入楼层和人数,addPeople 函数将人员添加到相应楼层,同时检查是否超载。
- 4. 持续运行: 主循环让用户不断输入楼层和人数,更新电梯状态。
你可以根据需求进行扩展或修改。
|