---
# System prepended metadata

title: scanf指令的作用

---

# scanf指令的作用
## printf的弟弟—scanf
- 用法
```c=
scanf("%?",&變數);
```
- `&`也是指標
    - [參考文章](https://kopu.chat/c%e8%aa%9e%e8%a8%80-%e8%b6%85%e5%a5%bd%e6%87%82%e7%9a%84%e6%8c%87%e6%a8%99%ef%bc%8c%e5%88%9d%e5%ad%b8%e8%80%85%e8%ab%8b%e9%80%b2%ef%bd%9e/)
- 功用
    - 程式執行到scanf會停下來等操作者從鍵盤輸入一個符合`%？`的值掃描進程式放到變數中
- 電腦基本操作設備
    - 螢幕
    - 鍵盤
        - 鍵盤有個緩衝區（buffer）
- 在stdio中是一組I/O
    - 電腦螢幕（命令列）是標準輸出
    - 電腦鍵盤是標準輸入
## scanf具體應用
```c=
printf("請輸入年齡"）;
scanf("%d", &x);
```
- 他會逐次問
    - `printf`是一次印
- 格式不對會亂印
    - VS下用`printf_s`跟`scanf_s`會報錯
### 補充
   - 寫程式防毒軟體要設定一下，不然可能會刪除檔案
   - 有時候終端機錯誤可能是最右邊終端機開太多個
   - 初始化效能會比較好嗎？[參考文章](http://squall.cs.ntou.edu.tw/cprog/old/Materials/VariableInitialization.html)
       - 好像日常設計使用影響不大，如果寫了可以在程式碼前加`//`隱藏為註解
       - 用`/*`跟`*/`可以註解數行
   - `%.8lf`可以指定小數點下八位以此類推
   - `Ctrl+C`可以在終端退出程式
### scanf功能釋疑：如果字元`%c`不在第一個，會無法輸入被跳過的現象
   - 原因
       - `\n`=Enter是一個字元
       - 被放入緩衝區
   - 解法
       ```c=
       char garbege;
       scanf("%c", &garbege)   
       ```