iT邦幫忙

2

【從零開始的 C 語言筆記】第十篇-scanf 介紹 & 結合printf的應用 (2)

Alicia 2021-10-28 15:35:2618683 瀏覽
  • 分享至 

  • xImage
  •  

不怎麼重要的前言

上一篇我們介紹了scanf的用法,雖然可能會有點小混亂,但應該不至於太難理解?

接下來我們來釐清一下觀念、幫scanf做個小結,最後有個小作業可以試試看喔!


scanf & printf的差異

看看下面的程式碼,關於printf的部分我們就不重複再提,可以參考看看第八篇的內容,比較不一樣的就是當中出現了「scanf();」函式來讀取輸入,而在讀取輸入前我放了一行提示輸入字串,方便提醒此時應該要輸入數字。

printf("plz input a number: ");
scanf("%d", &data);

可以看到scanf的語法跟printf在表面上看是有些類似的,差別在於scanf時變數前須加上「&」,因為scanf用來取得使用者的輸入後,再存入變數所在的地址,這就是為什麼要在後面的變數前加上「&」,而加上「&」的行為我們稱為「取址」,顧名思義是用來取得該資料的存放地址。

所以意義上差別有點像下圖這樣:

https://ithelp.ithome.com.tw/upload/images/20211027/20142565iljCTVE5gd.png


scanf小結

  1. 雖然跟printf語法有點像,但scanf後方補上的是變數地址(即「&變數名稱」的寫法),並可跟printf一樣一次使用多的變數(可以不同資料型態),只要以「,」隔開。
#include <stdio.h>

int main(){
    int data1;
    char data2;
    float data3;
    printf("plz input int.char.float: ");
    scanf("%d %c %f", &data1, &data2, &data3);

    printf("your data: %d %c %f\n", data1, data2, data3);

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211027/20142565XQv3WOmMhw.png

  1. scanf的預設分割符就是空白鍵與enter鍵,所以當有多個輸入時可以用空白鍵分開並一次輸入內容。
#include <stdio.h>

int main(){
    int data1, data2, data3;
    printf("plz input 3 int: ");
    scanf("%d%d%d", &data1, &data2, &data3);

    printf("your data: %d %d %d\n", data1, data2, data3);

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211027/20142565v7aseo44dD.png
(備註:若要限制讀取符號,讓其自動分割可以參考第七篇格式指令字的第4點)

  1. 可以在輸入時指定為特殊符號分割的格式
#include <stdio.h>

int main(){
    int data1, data2, data3;
    printf("plz input 3 int: ");
    scanf("%d.%d.%d", &data1, &data2, &data3);

    printf("your data: %d %d %d\n", data1, data2, data3);

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211027/201425655XVwGD7IiB.png


來實際運用看看吧!

徹底介紹完scanf跟printf,不知道大家吸收了多少呢,所以我們來嘗試做個可以輸入兩個int,然後自動加總輸入並輸出結果的程式吧!

結果要長得像以下這樣,大家來試試看吧:
https://ithelp.ithome.com.tw/upload/images/20211027/20142565fzgvu0sgsr.png


不曉得現在大家有沒有比較瞭解輸入輸出的方法了呢,記得還是要多多嘗試才能更加熟悉喔!

下一篇我們來談談指標是什麼吧!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言