2012-01-11 22 views
2

我們知道一些轉義序列'\ n' - 新行,但是說我們不知道\ a,\ b,\ c .... \ z是否是轉義序列。如何編寫一個程序,它允許我們在printf語句中測試從a到z和/或A到Z的每個字符,或者用其他方式來標識轉義序列,如果是,則打印它的值,例如輸出中可能看起來像這樣:如何編寫一個程序來識別C中的轉義序列並打印它們的值?

「\ B」是一個特殊字符和「\ b」值= 8

此程序可能都看傻了,但我不能夠找到一個解決方案,這... 在此先感謝。

+0

雖然它擊敗了編寫程序的目的,但您可以對所有這些轉義序列的谷歌... – Mysticial 2012-01-11 21:38:41

+0

這是HW嗎?爲什麼你需要全部打印出來?他們在這裏列出:http://msdn.microsoft.com/en-us/library/h21280bw(v=VS.100).aspx – mpen 2012-01-11 21:41:34

+0

你需要這個程序是在任何特定的語言?如果沒有,你可以編寫一個shell腳本,反覆編譯並運行一個C程序,爲每個字符x打印\ x並查看它輸出的內容。 – HighCommander4 2012-01-11 21:43:06

回答

2

正如Carl Norum指出的那樣,這些是由編譯器解釋的。可以採取類似的autoconf(其產生configure腳本程序)的方法:

#!/bin/bash 

for LETTER in {a..z} 
do 
    cat > letter.c <<EOF 
#include <stdio.h> 
int main() { printf("\\\\$LETTER has ASCII value %u\n", "\\$LETTER"[0]); } 
EOF 
    cc -Werror -o letter letter.c > /dev/null 2>&1 && ./letter 
done 

輸出:

\a has ASCII value 7 
\b has ASCII value 8 
\e has ASCII value 27 
\f has ASCII value 12 
\n has ASCII value 10 
\r has ASCII value 13 
\t has ASCII value 9 
\v has ASCII value 11 

注:其原因字符串常量,而不是一個字符常數只是外殼引用。這依賴於gcc-Werror,但您可以通過其他方式解決該問題。

4

閱讀標準C99文檔中的5.2.2p2。

字母轉義序列是:

\a \b \f \n \r \t \v 
+0

+1。現在我重新閱讀OP的問題,我想你可能會更加正確地回答手頭的實際問題。 – 2012-01-11 21:44:38

1

我想你可能會感到困惑發生了什麼。 編譯器正在解釋那些轉義序列,而不是任何運行時行爲。您的程序不能做你在問什麼,因爲\n\b或任何你想要的存在在你的程序在運行時的格式。例如,字符串中包含的是實際的ASCII值,而不是您在源代碼中必須使用的轉義序列,因爲無法輸入文字鈴聲字符。

0

這確實聽起來像一個家庭作業,所以我給你一些強烈的暗示:

  1. 看看isprint判斷()函數來告訴什麼可打印

  2. 看任何方便字符圖表來查看各種特殊字符如何用數字表示。

  3. 要打印該值,只需在printf中使用十進制(d)格式。

+1

換行符或製表符(例如)是可打印字符,也是'printf'轉義序列。 – 2012-01-11 21:45:32

+0

...我也可以寫出所有的代碼@CarlNorum。 – 2012-01-13 04:16:36

相關問題