---
# System prepended metadata

title: C++_IO(輸入)

---

# 輸入

## <cstdio>/<stdio.h>的scanf()

C 語言中的 `scanf` 函式
`scanf` 函式是 C 語言中用於從標準輸入（通常是鍵盤）讀取資料並存儲到變數中的函式。
它根據指定的格式來解析輸入的資料。


### NOTE:**注意標頭檔**

### 基本語法

```cpp=
scanf("格式控制字串", &變數1, &變數2, ...);
```

* **格式控制字串**：由格式規範組成，用來指定輸入的資料類型。
常見的格式規範有：


| 格式控制字串 | 作用 |
| -------- | -------- |
| %d         |    讀取整數      |
|   %f       |     讀取浮點數     |
|     %c     |     讀取單個字符     |
| %s   |  讀取字符串    |

&變數1, &變數2, ...：是要存放輸入數據的變數的地址。
注意，這裡要使用**取址運算符** &(這個就有點難懂了，要道後面才會教喔)，
因為 `scanf` 函式需要知道變數在内存中的位置才能將讀取的數據存儲進去。

eg.

```cpp=
#include <stdio.h>

int main() {
    
    int age;
    float height;
    char gender;

    printf("請輸入您的年齡：");
    scanf("%d", &age);

    printf("請輸入您的身高：");
    scanf("%f", &height);

    printf("請輸入您的性別：");
    scanf(" %c", &gender); 
    // 注意空格，用於吸收前面的換行符

    printf("您的年齡是 %d 歲，身高是 %.2f 公分，性別是 %c。\n", age, height, gender);

    return 0;
}
```

### scanf 的注意事項

1. **格式控制字串**：**必須與輸入的數據類型嚴格匹配**，否則可能會導致未定義的行為。
2. **空格和換行符**：`scanf` 會**自動跳過輸入中的空格和換行符**，除非你使用特定的格式規範來讀取空格或換行符。
3. **錯誤處理**：在使用 `scanf` 時，最好加上錯誤處理，以確保程序沒問題。
可以使用 `if` 語句判斷 `scanf` 的返回值，來檢查輸入是否成功。

### 小結

`scanf` 函式是 C 語言中非常常用的輸入函式，但使用時需要注意一些細節。
通過掌握 `scanf` 的用法，你可以更好地提高程序的互動性。
    
