2017-03-06 77 views
-1

最近,我一直有問題。關於linux和windows的顏色

#include <stdio.h> 
#include <stdlib.h> 
void main() 
{ 
    system("color 1F"); 
} 

這可以打印Windows,但不能在Linux中打印。爲什麼?

Error

+2

'無效的主要()'是古老的,你應該閱讀另一本書 –

+6

'系統() '執行一個命令。 'color 1F'是一個Windows命令。從本質上講,你的C代碼執行一個Windows命令,你想知道爲什麼它不能在其他系統中工作。 –

回答

6

無關,與C,你在執行上並不一定存在的命令system電話。

color存在於Windows外殼中,但不在Linux上。你的代碼在Linux上是不可移植的。

Linux有它自己的方式。您應該檢查您正在運行的操作系統,並且例如在檢測到Linux時(或在編譯時)調用setterm,因此您已經覆蓋了Linux的。

作爲便攜式選擇,標準ANSI escape sequences也廣泛使用了很多操作系統的(適用於Windows,you need Windows 10,雖然)

+1

根據Jens A. Koch的[answer here](http://stackoverflow.com/a/38617204/1475978)(也包括解決方法/建議),也許建議使用ANSI顏色代碼,現在即使Windows 10也支持它們其他Windows版本)? –

+0

@NominalAnimal好吧,但我認爲轉義序列需要一些調整才能在Windows上工作。例如在Python中,我們必須使用'colorama'重定向輸出。 –

+0

確實;例如,Win 10之前的Windows用戶Threshold update 2確實需要該用戶,或者使用Jens A. Koch答案中列出的備用命令提示符之一。我只是提出這個建議,因爲ANSI顏色代碼畢竟是最便攜的解決方案。他們傾向於在舊的Unix系統中得到支持。所有POSIXy系統都支持它們 - Linux,BSD,Mac。 MS-DOS用於通過ANSI.SYS支持ANSI轉義碼,但在某些時候,Microsoft從Windows命令提示符中刪除了支持。看起來它是在2015年11月的「閾值2更新」中爲Windows 10重新引入的。 –