centos 如何在Linux上使用c函数系统(命令)和转义符“\3”

e37o9pze  于 2022-11-07  发布在  Linux
关注(0)|答案(1)|浏览(166)

我在Windows上使用CodeBlocks编写代码。但是当我在Linux上使用GCC编译器运行代码时遇到了问题。在Linux上使用system("title heartshape")system("color XX")函数时,它连续显示以下错误:
“sh:color:找不到命令”
代码中的第12行到第43行是可以绘制心形的代码,在这个问题中没有用到,后面的for(;;)循环可以随着时间的推移连续改变心形的颜色。
源代码如下:


# include <math.h>

# include <stdlib.h>

# define I 20

# define R 340

int main(void)
{
    int i, j, e;
    int a;
    long time;
    system("title Heartshape");
/*codes that use to draw a heart, unhelpful to my question*/
    for (i = 1, a = I; i < I / 2; i++, a--)
    {
        for (j = (int)(I - sqrt(I * I - (a - i) * (a - i))); j > 0; j--)
            printf(" ");
        for (e = 1; e <= 2 * sqrt(I * I - (a - i) * (a - i)); e++)
            printf("\3");
        for (j = (int)(2 * (I - sqrt(I * I - (a - i) * (a - i)))); j > 0; j--)
            printf(" ");
        for (e = 1; e <= 2 * sqrt(I * I - (a - i) * (a - i)); e++)
            printf("\3");
        printf("\n");
    }
    for (i = 1; i < 80; i++)
    {
        printf("\3");
    }
    printf("\n");
    for (i = 1; i <= R / 2; i++)
    {
        if (i % 2 || i % 3)
            continue;
        for (j = (int)(R - sqrt(R * R - i * i)); j > 0; j--)
            printf(" ");
        for (e = 1; e <= 2 * (sqrt(R * R - i * i) - (R - 2 * I)); e++)
            printf("\3");
        printf("\n");
    }
/*codes that use to change the color of the heart*/
    for (;;)
    {
        system("color a");
        for (time = 0; time < 99999999; time++);

        system("color b");
        for (time = 0; time < 99999999; time++);

        system("color c");
        for (time = 0; time < 99999999; time++);

        system("color d");
        for (time = 0; time < 99999999; time++);

        system("color e");
        for (time = 0; time < 99999999; time++);

        system("color f");
        for (time = 0; time < 99999999; time++);

        system("color 0");
        for (time = 0; time < 99999999; time++);

        system("color 1");
        for (time = 0; time < 99999999; time++);

        system("color 2");
        for (time = 0; time < 99999999; time++);

        system("color 3");
        for (time = 0; time < 99999999; time++);

        system("color 4");
        for (time = 0; time < 99999999; time++);

        system("color 5");
        for (time = 0; time < 99999999; time++);

        system("color 6");
        for (time = 0; time < 99999999; time++);

        system("color 7");
        for (time = 0; time < 99999999; time++);

        system("color 8");
        for (time = 0; time < 99999999; time++);

        system("color 9");
        for (time = 0; time < 99999999; time++);
    }
    return 0;
}

这是我项目的全部源代码。
该代码可以在Windows编译器上完美运行,但在Linux上一直显示错误sh: color: command not found
在我仅仅一周的Linux有限经验中,我只能假设在c中使用system()时,Windows和Linux之间存在差异,并且转义符\3在Linux上也不会显示。
我已经找到了relevant question here,但是这个问题似乎还没有解决,至少答案对我没有帮助。其他的答案似乎太复杂了,无法解决这个问题。
我想知道使用system()函数的区别,以及在Linux上是否有连续改变心形形状颜色的好做法?或者有替代方法吗?

7qhs6swi

7qhs6swi1#

问题不在于函数system(),尽管它在幕后做的事情不同。当然,因为Windows和Linux是不同的操作系统。但是作为一个标准的库函数,它通常在两个系统上做相同的事情:它让操作系统的命令处理器执行内部命令或启动另一个程序。
问题出在你试图执行的程序(命令)上。命令“title”和“color”对我的shell(Arch Linux上的bash)来说是未知的,但对Windows的shell(“cmd.exe”)来说是已知的。
类似的问题是'\3'的输出。这个特殊字符只以shell的特定字体显示。
你需要采取另一种方法。有几种可能的解决方案,例如使用“ncurses”作为一个操作系统独立的库。

相关问题