2011年12月12日 星期一

C 語言入門 - 如何輸出文字

如何讓程式輸出我們要的文字

  要讓程式在畫面上輸出我們所希望的文字,並不是那麼容易的事。不過現在你只需要知道它很難就夠了。C 語言會提供你一個函式,供你呼叫。函式就像是數學的函數一般,你將一個或多個數字丟進去,它就會依照固定的式子告訴你結果。這裡也是一樣,函式是一個由程式碼所寫成的小程式,你如果要使用它,就呼叫它,它就會執行它內部的程式碼為你做事,你可以不知道它怎麼做到的,只要知道它能做什麼,就可以使用它了。你可以看成是一把槍,你可以不懂它怎麼發射子彈,但是你知道它的功能是射出子彈,知道使用時要扣動扳機,就可以使用它了。

  要在畫面上輸出文字,使用的是 printf() 這個函式,如同前面的例子:

printf("I'm fucking pro\n");

  函式大多需要搭配特定的「參數」,你呼叫它意味著你想做些什麼,但它必須知道你想怎麼做。比如說,我們希望在畫面上輸出文字,所以我們呼叫它,也就是叫它的名字,然後在後面加上一對小括號,表示我們叫的是,名為 printf 的函式,最後以分號結束這個動作。

printf();

  但是它必定覺得很困惑。你想在畫面上輸出文字,但是它不會讀心術,不會知道你想輸出什麼。你並沒有告訴它這件事,所以它會產生錯誤。就算一樣是人也不會知道你心裡想著什麼,所以請坦率地告訴它,你想輸出的文字。後面那一對小括號,便是為此而生。你可以將你希望的文字,作為「參數」寫在小括號中,就能夠傳遞給它。以「Happy Birthday」為例,

printf("Happy Birthday\n");

  相當好,你明確地告訴電腦你想輸出的是「Happy Birthday」。同時,顯然你已經找到另一種贈送生日卡或甚至生日禮物的方式了,你的程式會為對方獻上滿滿的祝福。但是你必須確定對方不會寫程式,然後送他執行檔。如果他懂得如何編譯,他應該只會訝異怎麼如此簡陋無趣。

  你可能會想問,我寫成這樣為什麼不可以?

printf(Happy Birthday\n);

  為什麼要用雙引號括起來?這是個好問題。這是為了讓電腦能夠準確辨識你想輸出的東西是什麼。我舉個最簡單的例子吧。

printf(printf(abc)\n);

  好的,請問咱們親愛的編譯器該如何解讀它?我們有幾個選項。

  一、輸出「printf(abc)\n」
  二、輸出 printf(abc) 的運行結果,加上 \n。當然 abc 也會在運行時輸出。

  假設它選擇方法一,那麼如果哪天,我們希望是方法二怎麼辦?它如何判斷?反之亦然。正因為這種寫法曖昧不清,以致有多種解讀方式,而且沒有可以正確判斷的方法。即使今天其中一種解讀方法會導致當機,你也不能假設另一種才是對的。因為我們可能就是惡意想讓它當機,或是示範給他人看,這樣會當機。所以,我們用各種符號與規定,防止這種「同樣的程式碼有多種解讀方式」的情形。也就是用雙引號 "" 來表示這些是文字,也就是所謂的「字串」(string),從而避免將這些解讀成其它程式碼的情形。而只要不加 "" 就能夠避免將程式碼當作文字直接輸出的情形。

  由於我們要輸出的確實是文字,因此要加上雙引號,讓它變成字串,作為字串解讀。字串就是一個由零或多個文字組成的有序的排列。而文字在 C 語言中稱為「字元」,也就是一個字。所以字串就是一個字元序列,也就是零或多個字元的有序排列。

  那麼現在你應能掌握如何輸出一段文字了。但仍要避免幾乎任何在英數模式下打不出來的文字。這點在字元相關的文章中會解釋為什麼。

沒有留言:

張貼留言