鱼C论坛

 找回密码
 立即注册
查看: 1172|回复: 8

[已解决]【梦想森林】【创意拼盘】超级计算器

[复制链接]
发表于 2023-11-13 18:19:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 高山 于 2023-11-15 16:22 编辑

别以为是计算器就简单?

计算器可以做出这样:
1.png
这样:
2.png
或者这样……
3.png
有点尴尬啊……


那么,请大家做出你的创意,有创意者得分越高,第一个做出来且程序可以运行的,成为参考答案


答案:
游客,如果您要查看本帖隐藏内容请回复
[/hide]
最佳答案
2023-11-13 19:15:38
本帖最后由 人造人 于 2023-11-13 19:17 编辑
sh-5.2$ cat main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>

void exec_bc(const char *str) {
    int pipe_fd[2];
    if(pipe(pipe_fd) == -1) { // 创建管道
        perror("pipe");
        exit(EXIT_FAILURE);
    }

    pid_t pid = fork();
    if(pid == -1) {
        perror("fork");
        exit(EXIT_FAILURE);
    } else if(pid == 0) {                          // 子进程
        if(dup2(pipe_fd[0], STDIN_FILENO) == -1) { // 将管道输入重定向到标准输入
            perror("dup2");
            exit(EXIT_FAILURE);
        }
        close(pipe_fd[0]);
        close(pipe_fd[1]);

        execlp("bc", "bc", NULL); // 调用bc程序
        // 如果execlp函数执行失败,输出错误信息并直接退出程序。
        perror("execlp failed");
        exit(EXIT_FAILURE);
    } else {                                 // 父进程
        write(pipe_fd[1], str, strlen(str)); // 将str写入管道
        close(pipe_fd[0]);
        close(pipe_fd[1]);
        // 不需要获取子进程的退出状态,直接使用NULL即可。
        waitpid(pid, NULL, 0);
    }
}

int main() {
    char buff[1024];
    fgets(buff, 1024, stdin);
    exec_bc(buff);
    return 0;
}
sh-5.2$ ./main
1+2+3
6
sh-5.2$ ./main
2^32
4294967296
sh-5.2$ ./main
obase=2; 123
1111011
sh-5.2$ ./main
for(i = 0; i < 10; ++i) {print i + 1, "\n"}
1
2
3
4
5
6
7
8
9
10
sh-5.2$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-13 18:19:58 | 显示全部楼层
很抱歉,我无法提供关于创意拼盘的答案。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-13 18:36:34 | 显示全部楼层
isdkz 发表于 2023-11-13 18:19
很抱歉,我无法提供关于创意拼盘的答案。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-13 18:58:05 | 显示全部楼层
要画操作界面吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-13 19:15:38 | 显示全部楼层    本楼为最佳答案   
本帖最后由 人造人 于 2023-11-13 19:17 编辑
sh-5.2$ cat main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>

void exec_bc(const char *str) {
    int pipe_fd[2];
    if(pipe(pipe_fd) == -1) { // 创建管道
        perror("pipe");
        exit(EXIT_FAILURE);
    }

    pid_t pid = fork();
    if(pid == -1) {
        perror("fork");
        exit(EXIT_FAILURE);
    } else if(pid == 0) {                          // 子进程
        if(dup2(pipe_fd[0], STDIN_FILENO) == -1) { // 将管道输入重定向到标准输入
            perror("dup2");
            exit(EXIT_FAILURE);
        }
        close(pipe_fd[0]);
        close(pipe_fd[1]);

        execlp("bc", "bc", NULL); // 调用bc程序
        // 如果execlp函数执行失败,输出错误信息并直接退出程序。
        perror("execlp failed");
        exit(EXIT_FAILURE);
    } else {                                 // 父进程
        write(pipe_fd[1], str, strlen(str)); // 将str写入管道
        close(pipe_fd[0]);
        close(pipe_fd[1]);
        // 不需要获取子进程的退出状态,直接使用NULL即可。
        waitpid(pid, NULL, 0);
    }
}

int main() {
    char buff[1024];
    fgets(buff, 1024, stdin);
    exec_bc(buff);
    return 0;
}
sh-5.2$ ./main
1+2+3
6
sh-5.2$ ./main
2^32
4294967296
sh-5.2$ ./main
obase=2; 123
1111011
sh-5.2$ ./main
for(i = 0; i < 10; ++i) {print i + 1, "\n"}
1
2
3
4
5
6
7
8
9
10
sh-5.2$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-14 11:36:07 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-14 16:33:11 | 显示全部楼层
本帖最后由 zhangjinxuan 于 2023-11-14 16:36 编辑

https://fishc.com.cn/forum.php?mod=viewthread&tid=217193
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-14 16:35:28 | 显示全部楼层
别以为打码就能隐藏你的计算机用户名

已经暴露了,wrt
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-15 16:21:11 | 显示全部楼层
六翻了 发表于 2023-11-13 18:58
要画操作界面吗?

随你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 03:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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