<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 練習6:變量類型 > 原文:[Exercise 6: Types Of Variables](http://c.learncodethehardway.org/book/ex6.html) > 譯者:[飛龍](https://github.com/wizardforcel) 你應該掌握了一個簡單的C程序的結構,所以讓我們執行下一步簡單的操作,聲明不同類型的變量。 ```c include <stdio.h> int main(int argc, char *argv[]) { int distance = 100; float power = 2.345f; double super_power = 56789.4532; char initial = 'A'; char first_name[] = "Zed"; char last_name[] = "Shaw"; printf("You are %d miles away.\n", distance); printf("You have %f levels of power.\n", power); printf("You have %f awesome super powers.\n", super_power); printf("I have an initial %c.\n", initial); printf("I have a first name %s.\n", first_name); printf("I have a last name %s.\n", last_name); printf("My whole name is %s %c. %s.\n", first_name, initial, last_name); return 0; } ``` 在這個程序中我們聲明了不同類型的變量,并且使用了不同的`printf`格式化字符串來打印它們。 ## 你會看到什么 你的輸出應該和我的類似,你可以看到C的格式化字符串相似于Python或其它語言,很長一段時間中都是這樣。 ```sh $ make ex6 cc -Wall -g ex6.c -o ex6 $ ./ex6 You are 100 miles away. You have 2.345000 levels of power. You have 56789.453200 awesome super powers. I have an initial A. I have a first name Zed. I have a last name Shaw. My whole name is Zed A. Shaw. $ ``` 你可以看到我們擁有一系列的“類型”,它們告訴編譯器變量應該表示成什么,之后格式化字符串會匹配不同的類型。下面解釋了它們如何匹配: 整數   使用`int`聲明,使用`%d`來打印。 浮點   使用`float`或`double`聲明,使用`%f`來打印。 字符   使用`char`來聲明,以周圍帶有`'`(單引號)的單個字符來表示,使用`%c`來打印。 字符串(字符數組)   使用`char name[]`來生命,以周圍帶有`"`的一些字符來表示,使用`%s`來打印。 你會注意到C語言中區分單引號的`char`和雙引號的`char[]`或字符串。 > 注 > 當我提及C語言類型時,我通常會使用`char[]`來代替整個的`char SOMENAME[]`。這不是有效的C語言代碼,只是一個用于討論類型的一個簡化表達方式。 ## 如何使它崩潰 你可以通過向`printf`傳遞錯誤的參數來輕易使這個程序崩潰。例如,如果你找到打印我的名字的那行,把`initial`放到`first_name`前面,你就制造了一個bug。執行上述修改編譯器就會向你報錯,之后運行的時候你可能會得到一個“段錯誤”,就像這樣: ```sh $ make ex6 cc -Wall -g ex6.c -o ex6 ex6.c: In function 'main': ex6.c:19: warning: format '%s' expects type 'char *', but argument 2 has type 'int' ex6.c:19: warning: format '%c' expects type 'int', but argument 3 has type 'char *' $ ./ex6 You are 100 miles away. You have 2.345000 levels of power. You have 56789.453125 awesome super powers. I have an initial A. I have a first name Zed. I have a last name Shaw. Segmentation fault $ ``` 在`Valgrind`下運行修改后的程序,來觀察它會告訴你什么關于錯誤“Invalid read of size 1”的事情。 ## 附加題 + 尋找其他通過修改`printf`使這段C代碼崩潰的方法。 + 搜索“`printf`格式化”,試著使用一些高級的占位符。 + 研究可以用幾種方法打印數字。嘗試以八進制或十六進制打印,或者其它你找到的方法。 + 試著打印空字符串,即`""`。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看