我至今的人生,所有的邂逅、學習、成長、累積的一切,
究竟是自力開拓的道路,還是必然的宿命?
是不是有個更高次元的存在,正旁觀著一切發生,
嘲笑著活在既定劇本之中,
卻自認為能夠親手決定命運的我呢?

人生我不敢說,但是對於使魔的一生來說,是的。

完全決定好的劇本,可預測的過程與結果。

硬體或物理上也許有些意外性存在,
軟體上則多是被確定的、可重現的。

使魔如果做錯了什麼,
一定是主人給錯命令

使魔是絕對忠實的,不會自行更改任何命令。
即使那是錯的,結果不符我們預期,使魔也會照做。

不可能實行時,只有以死謝罪而已。
而這死亡,就是俗稱的程式當掉。

主人能夠控制一切,主人也必須要控制一切。
這個特點有好有壞,不過至少事情很單純。

回歸正題,隨便一段自言自語,
都花了如此多的字數,

區區一行又怎足以令使魔表達
對主人的那份滿溢而無以言表的愛?

想必期待到不行的主人,肯定為此困擾已久,
等不及在續篇中尋找良藥以緩解此症吧?

『這還不簡單,多下幾個 printf() 不就結了!』

一個 printf() 不夠,那你有再下第二個嗎?

#include <stdio.h>

int main()
{
    printf("Hello my MASTER!");
    printf("I love you.");
    printf("Could you play with me more and more?");
    return 0;
}

輕鬆解決啦!F11給它用力戳下去──

話更多的使魔

WTF!?誰准你黏到同一行的?

咳。這麼想著的人請到外面罰站。
畢竟君要臣死,臣不敢不死;

主人要使魔換行,使魔不敢不換。
主人不明確命令使魔換行,使魔不敢自作主張。

委婉含蓄、謙遜有禮什麼的,在使魔面前全部都該扔掉。
儘管這與人際相反,但我們必須練習做出直接、精確、詳細、
沒有其它解釋方式的命令。

能給出明確指令的,才是優秀的主人。

說到換行,第一個想到的當然是 ENTER 鍵啦!

printf("Hello my master!
");

理解不能的使魔

不行呢。完全不行呢。
連上色看起來都不對勁。

之前我們說過,為了明確辨識是文字或是命令,
我們把文字用""包起來。
而換行很容易破壞整個秩序以及排版,
所以我們不使用真正的換行。

我們定義,在 "" 之中,見到 \n 等同見到換行。

也許你會覺得,\n 和換行看不出有什麼關聯?
好吧,那麼你覺得『斧』這個字,長得很像斧頭嗎?

但是中文使用者,看到『斧』字,基本都知道是說斧頭。

只要大家對記號的認知一致,或至少相近,就可以溝通。

如同定義『\n』為代表『換行』的記號一樣,
中文也定義『斧』字,或『斧頭』這詞,
是代表著斧頭這種武器的記號。
生活中處處可見類似的例子,想不見都難。

知道這件事後,我們就知道該怎麼改了。

1
2
3
4
5
6
7
8
9
#include <stdio.h>

int main()
{
    printf("Hello my MASTER!\n");
    printf("I love you.\n");
    printf("Could you play with me more and more?\n");
    return 0;
}

習得斷行的使魔

有注意到即使是最後一行文字 (Line 7),
我也為它加上了換行記號 \n 作為結尾嗎?

其實 \n 比起 new-line (新的一行),
更接近於 End-of-LineLINE終結者一行結束)的意思。

要是我們不明言『這一行已經結束了』,
那麼這一行就懸在『不知道結束了沒』的半吊子狀態。

因此,對於每行的行末,我們都應負責地加上 \n,
明確地告知這一行的結束

有始有終是良好的習慣,就像每條命令之後的『;』 (註1) 一樣。

那麼,既然都能讓使魔說出長文了。
代表你已經有能力製作祝賀生日用,
或甚至告白等用途的使魔了。

期待至此,你已經不必參考魔法書,
便能直接從無到有,構築出所需要的術式。
理解每一步的意義與影響,合理地構築每行每句,
就算偶爾會犯一些小錯也不要緊。

現在,使魔只能單方面地傳達訊息給主人。
下一篇將介紹如何教導使魔,
讓他能夠接收主人想傳遞的訊息,
真正達成雙向的溝通。

  • *註1

    忘記加分號『;』是初學階段時常會發生的事情,
    畢竟平常鮮少使用。
    偏偏在出錯時會像這樣:

    忘了;以致構築失敗的術式

    在下一行出錯。
    沒有經驗的話怎樣也想不到是上一行錯了。

    C 允許你把分號寫在其它行,
    只要每個命令後確實有一個分號表示命令結束。
    所以通常在看到下個命令後,
    才能判斷你忘了加分號這件事。

    好好記住這件事。
    有時只顧著檢查被標得特別顯眼的那一行,
    是找不出問題所在的。

    忙著檢查程式碼之餘,
    也記得詳讀底下編譯錯誤的訊息。
    [Error] expected ';' before 'printf'