我在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上是否有连续改变心形形状颜色的好做法?或者有替代方法吗?
1条答案
按热度按时间7qhs6swi1#
问题不在于函数
system()
,尽管它在幕后做的事情不同。当然,因为Windows和Linux是不同的操作系统。但是作为一个标准的库函数,它通常在两个系统上做相同的事情:它让操作系统的命令处理器执行内部命令或启动另一个程序。问题出在你试图执行的程序(命令)上。命令“title”和“color”对我的shell(Arch Linux上的bash)来说是未知的,但对Windows的shell(“cmd.exe”)来说是已知的。
类似的问题是
'\3'
的输出。这个特殊字符只以shell的特定字体显示。你需要采取另一种方法。有几种可能的解决方案,例如使用“ncurses”作为一个操作系统独立的库。