2014-04-16 19 views
3

我有一個名爲的文件output.txt並且我想在其中打印一個根(√)符號。 這裏是我的程序如何在一個文件中打印帶有c的根符號

#include<stdio.h> 
#include<conio.h> 
void main(void) 
{ 
    FILE *fptr;  
    fptr = fopen("output.txt","w+"); //open the file to write 
    fprintf(fptr,"\xfb");   // \xfb is the hexadecimal code for root symbol 
    fclose(fptr); 
} 

但是當我運行程序(U)被印在它

+0

'û'是Unicode字符碼點' \ xfb'。 –

回答

4

您所遇到的問題是因爲你正試圖使用​​擴展ASCII字符集的一部分(即:值在127以上的字符)。 代碼頁是您設置的內容,因此如果設置了8位ASCII符號的MSB,則它可映射到許多不同代碼頁中的一個,具體取決於區域/語言環境,操作系統等(即希臘語,拉丁語,等等)。在大多數情況下,ASCII字符通常被認爲是7位,忽略代碼頁使能位。

嘗試使用擴展ASCII不是便攜式的做法,所以最好的辦法是:

  1. 製作使用Unicode
  2. 確保您的C編譯器是C99標準。

下面的例子解決了原來的問題。

源代碼從樣品試驗


#include <stdio.h> 

void main(void) { 
    FILE *fptr;  
    fptr = fopen("output.txt","w+"); //open the file to write 
    fprintf(fptr, "\u221A\n"); 
    fclose(fptr); 
} 

輸出


參考


  1. 如何通過一個C程序打印擴展ASCII字符127到160?,訪問的2014年4月16日,<https://stackoverflow.com/questions/16359225/how-to-print-extended-ascii-characters-127-to-160-in-through-a-c-program>
  2. Unicode字符 '平方根'(U + 221A),訪問的2014年4月16日,<http://www.fileformat.info/info/unicode/char/221a/index.htm>
+2

只需添加到這一點... 0xfb是代碼頁437(舊DOS/Windows)中的平方根符號。更現代的Windows版本似乎沒有在典型的代碼頁1250或1252中包含平方根符號,它似乎也不存在於任何ISO-8859字符集中。因此,除非您可以確保爲代碼頁437設置的終端環境,否則在正確配置的支持Unicode的終端中使用Unicode'u221a'即可。 – twalberg

+0

@twalberg如何確保終端環境設置爲代碼頁437 – user3536228

+1

你需要確保你有1)支持CP437字體,2)安裝一個基於CP437區域,3)終端仿真器,將支持CP437 ,以及可能的其他一些事情,然後確保它們的配置都是正確的......我認爲,至少在現代系統上,只需進行Unicode路由的工作就會少一些,因爲CP437被廣泛認爲是過時的/被棄用的/死亡的。 – twalberg