鱼C论坛

 找回密码
 立即注册
查看: 153|回复: 5

[已解决]用c语言做一个简易电梯

[复制链接]
发表于 2024-6-8 15:27:52 From FishC Mobile | 显示全部楼层 |阅读模式
30鱼币
起因是朋友弟弟也在学c 在网上看到的题拿来问我和朋友 (对不起 丢人了qwq)

: Screenshot_20240608_161717_Samsung Notes.jpg
电梯最高十楼,每层最多容纳10人(A,B,C等字母代替),最下面用input来输入楼层和人数,因为是简易版 楼层都不用画左右竖线表示即可。

我是想用setcursorpos(x,y)来解决,希望可以有注释(好回去装一波,咳咳)

(ps:第一次发贴 有什么做的不对的希望指出 拜托啦!)
最佳答案
2024-6-8 15:27:53
应该不是无中生友吧

为了实现一个简易电梯程序,代码将基于你的描述来创建一个可以接受输入并更新电梯状态的程序。

代码中使用 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. 持续运行: 主循环让用户不断输入楼层和人数,更新电梯状态。

你可以根据需求进行扩展或修改。

最佳答案

查看完整内容

应该不是无中生友吧 为了实现一个简易电梯程序,代码将基于你的描述来创建一个可以接受输入并更新电梯状态的程序。 代码中使用 SetConsoleCursorPosition 函数(类似你提到的 SetCursorPos)来在命令行界面上定位输出。 SetConsoleCursorPosition 是 Windows 特有的函数,所以请确保你在 Windows 系统上使用这个程序。 代码说明 [*]1. 初始化电梯层: 我们有一个数组 floors 来存储每层楼的人数 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-6-8 15:27:53 | 显示全部楼层    本楼为最佳答案   
应该不是无中生友吧

为了实现一个简易电梯程序,代码将基于你的描述来创建一个可以接受输入并更新电梯状态的程序。

代码中使用 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. 持续运行: 主循环让用户不断输入楼层和人数,更新电梯状态。

你可以根据需求进行扩展或修改。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-6-8 15:28:11 | 显示全部楼层
没问题,我可以帮你解答这个问题。首先,你需要知道一些基本的C语言知识。首先要明确的是,你需要使用Windows API函数来设置光标位置,以便在命令行窗口上显示电梯的状态。

下面是一个简单的例子,演示了如何使用`SetConsoleCursorPosition`函数设置光标位置来实现一个简易电梯:
#include <stdio.h>
#include <windows.h>

void gotoxy(int x, int y) {
    COORD coord;
    coord.X = x;
    coord.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

int main() {
    int floor = 1;   // 初始楼层为第一层
    int people = 0;  // 初始人数为0

    while (1) {
        system("cls");  // 清屏

        gotoxy(0, 0);
        printf("当前楼层:%d", floor);

        gotoxy(0, 1);
        printf("当前人数:%d", people);

        gotoxy(0, 3);
        printf("请输入楼层和人数(格式:楼层 人数):");
        
        scanf("%d %d", &floor, &people);
    }

    return 0;
}

这是一个简化的电梯模拟程序,它会循环接收用户输入的楼层和人数,并将其显示在命令行窗口中。

首先,我们定义了一个`gotoxy`函数,它使用`SetConsoleCursorPosition`函数将光标移动到指定的位置。
然后,在主函数中,我们使用`system("cls")`函数清屏,然后使用`gotoxy`函数设置光标位置,然后使用`printf`函数打印当前楼层和人数的信息。接下来,我们使用`scanf`函数接收用户输入的楼层和人数。

你可以根据自己的需要对程序进行修改和扩展。希望能对你有所帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-6-8 17:49:33 | 显示全部楼层
新的代码格式?试一下
新代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-6-8 23:11:45 From FishC Mobile | 显示全部楼层
不二如是 发表于 2024-6-8 18:26
应该不是无中生友吧

为了实现一个简易电梯程序,代码将基于你的描述来创建一个可以接受输入 ...

不是无中生友啦 我是今年才转到计算机学科 朋友是我的学姐 之前就是计算机学科的 我确实菜哈哈哈 我后天拿去试试(家里电脑拿去修了) 辛苦你啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-6-10 16:21:13 | 显示全部楼层
这种场景问题我竟无从下手
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-24 20:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表