【问题标题】:How to clear terminal in C without using #include? [closed]如何在不使用#include的情况下清除C中的终端? [关闭]
【发布时间】:2021-03-24 04:59:46
【问题描述】:

我想在不使用 #include 的情况下清除 C 中的终端。

这是我的代码:

int printf(const char *format, ...);

int main()
{
    printf("%c2J", 27);
}

【问题讨论】:

  • 这里的“没有#include”是什么意思(#include与清除终端有什么关系)?
  • 我认为你不明白 #include 做了什么。我建议先理解这一点,然后你就会明白为什么这个问题要么没有答案,要么答案很琐碎(取决于你真正想要什么)。
  • 您想要printf("\033[H\033[J");,并且由于您已经为printf 提供了原型,因此无需包含stdio.h
  • @DavidRanieri 但他想要自己的功能(可能 OP 认为 .h 是一个很常见的初学者误解的库)。他应该编译-nostdlib
  • C 编程语言没有任何本机命令或功能。你必须使用标准库

标签: c linux terminal


【解决方案1】:

如果不使用标准库中的函数,您可能无法清除终端,但可能最接近的事情是使用 ANSI 转义序列,可能 根据您的终端工作。

你必须输出\x1b[2J(可能后面是\x1b[H)。这些是 ANSI 终端转义序列,分别用于清除屏幕和将光标重新定位在左上角的“home”位置。

#include <stdio.h>


int main(void) {
    printf("\x1b[2J\x1b[H");
    return 0;
}

请注意,即使您为printf() 指定了函数原型,就像您在上面所做的那样,您仍然在使用标准库而不是自己制作。我只能想到你想要这样做的一个原因:让 quine 适合一条线。

【讨论】:

  • 不需要原始模式,printf() 格式字符串中的 ANSI 转义可以正常工作。
  • 你正在使用#include。
  • @Programmer:是的,正如我所说,你所问的要么没有意义(你想使用没有头文件的标准库?但这不是“制作[ing] [你的]自己的功能") 或者不能在 C 中完成。如果您想创建自己的 write()printf() 函数,则必须为您的架构学习汇编语言。
  • @DavidC.Rankin 编辑得当
  • 是的,它是 ANSI。但是你为什么要使用#include?您可以删除#include &lt;studio.h&gt; 并将其更改为int printf(const char *format, ...);。之后,我可以接受你的回答。
【解决方案2】:

如果您想编写自己的函数,则不应使用 standatd 库。 Invlude 无关紧要,因为 .h 文件不是库。您应该使用-nostdlib 选项编译代码并编写您自己的函数。

在您的代码中,您只需使用标准库函数 - 而不是您自己的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 2019-12-07
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2014-06-27
    相关资源
    最近更新 更多