《C語言程式設計:現代方法(第2版)(K.N.King 著)》學習筆記四:C語言基本概念(3)
阿新 • • 發佈:2018-12-13
2.5 讀入輸入
- 為了獲取輸入,就要用到 scanf 函式。它是C函式庫中與 printf 相對應的函式。scanf 中的字母 f 和 printf 中的字母 f 含義相同,都是表示“格式化”的意思。scanf 函式和 printf 函式都需要使用格式串(format string)來指定輸入或輸出資料的形式。scanf 函式需要知道將獲得的輸入資料的格式,而 printf 函式需要知道輸出資料的顯示格式。
- 為了讀入一個 int 型值,可以使用下面的 scanf 函式呼叫:
scanf("%d", &i);
- 其中,
%d
說明 scanf 函式讀入的是一個整數,而 i 是一個 int 型變數,用來儲存 scanf 函式讀入的輸入。變數 i 前的運算子&
- 讀入一個 float 型值時,需要一個形式略有不同的 scanf 函式呼叫:
scanf("%f", &x);
%f
只用於 float 型變數,因此這裡假設 x 是一個 float 型變數。字串%f
告訴 scanf 函式去尋找一個 float 格式的輸入值(此數可以含有小數點,但不是必須含有)。
[程式] 計算箱子的空間重量(改進版):dweight2.c
/* Computes the dimensional weight of a
box from input provided by the user */
#include <stdio.h>
int main(void)
{
int height, length, width, volume, weight;
printf("Enter height of box: "); /* 提示使用者輸入的訊息(提示符)通常不應該以換行符結束,因為
我們希望使用者在同一行輸入。這樣,當用戶敲回車鍵時,游標會自動移動到下一行,因此就不需要程式
通過顯示換行符來終止當前行了。 */
scanf("%d", &height);
printf("Enter length of box: " );
scanf("%d", &length);
printf("Enter width of box: ");
scanf("%d", &width);
/* 這段程式碼還有一個問題:如果使用者輸入的不是數值(比如說字母、標點符號),程式就會出現
問題。不過不要擔心,在以後的學習中我們會詳細討論這個問題。*/
volume = height * length * width;
weight = (volume + 165) / 166;
printf("Volume (cubic inches): %d\n", volume);
printf("Dimensional weight (pounds): %d\n", weight);
return 0;
}
2.6 定義常量的名字
- 當程式含有常量時,建議給這些常量命名,因為在後期閱讀程式時也許有些人不會明白某些常量的含義。我們可以採用稱為巨集定義(macro definition)的特性給常量命名:
#define INCHES_PER_POUND 166
- 這裡的
#define
是預處理指令,類似於前面所講的#include
,因而在此行的結尾也沒有分號。 - 當對程式進行編譯時,前處理器會把每一個巨集替換為其表示的值。例如,語句
weight = (volume + INCHES_PER_POUND - 1) / INCHES_PER_POUND;
將變成weight = (volume + 166 - 1) / 166;
。 - 還可以利用巨集來定義表示式:
#define RECIPROCAL_OF_PI (1.0f / 3.14159f)
- 當巨集包含運算子時,必須用括號把表示式括起來。
- 注意,巨集的名字只用了大寫字母。這是大多數C程式設計師遵循的規範,但並不是C語言本身的要求,而本書作者則強烈建議讀者不要打破此規範。統一使用大寫字母作為巨集的名字,可以讓你快速辨認出程式中哪些地方使用了巨集。
[程式] 華氏溫度轉換為攝氏溫度:celsius.c
/* Converts a Fahrenheit temperature to Celsius */
#include <stdio.h>
#define FREEZING_PT 32.0f
#define SCALE_FACTOR (5.0f / 9.0f) /* 如果把 (5.0f / 9.0f) 寫成 (5 / 9),則 SCALE_FACTOR 表示的值為 0,
因為 5 和 9 是兩個 int 值,它們相除的結果會向下取整。5.0f 和 9.0f 是兩個 float 型值,它們相除的結果將會保
留小數部分。*/
int main(void)
{
float fahrenheit, celsius;
printf("Enter Fahrenheit temperature: ");
scanf("%f", &fahrenheit);
celsius = (fahrenheit - FREEZING_PT) * SCALE_FACTOR;
printf("Celsius equivalent: %.1f\n", celsius); // 注意,使用 %.1f 顯示 celsius 的值時,小數點後只顯示一位數字。
return 0;
}