06-scanf函數

來源:互聯網
上載者:User

標籤:style   blog   http   使用   width   資料   

一、 變數的記憶體分析1. 位元組和地址

為了更好地理解變數在記憶體中的儲存細節,先來認識一下記憶體中的“位元組”和“地址”。

1> 記憶體以“位元組為單位”

 

0x表示的是十六進位,不用過於糾結,能看懂這些數字之間誰大誰小就行了

2> 不同類型佔用的位元組是不一樣的,資料越大,所需的位元組數就越多

 

2. 變數的儲存

1> 所佔用位元組數跟類型有關,也跟編譯器環境有關

 

2> 變數執行個體

int b = 10;

int a = 20;

l 記憶體由大到小定址,優先分配記憶體位址較大的位元組給變數。b的記憶體位址比a大

l 每個變數都有地址:第一個位元組的地址就是變數的地址

3> 查看記憶體位址:

int a;

printf("a的地址是:%p\n", &a);

4> 注意

在變數未經初始化之前,不要嘗試使用變數的值

int a;

printf("a的值是:%d\n", a);

上面的寫法是不建議的

 

二、 scanf函數1. 簡介

這也是在stdio.h中聲明的一個函數,因此使用前必須加入#include <stdio.h>。調用scanf函數時,需要傳入變數的地址作為參數,scanf函數會等待標準輸入裝置(比如鍵盤)輸入資料,並且將輸入的資料賦值給地址對應的變數

 

2. 簡單用法

int age;

scanf("%d", &age);

l scanf函數時,會等待使用者的鍵盤輸入,並不會往後執行代碼。scanf的第1個參數是"%d",說明要求使用者以10進位的形式輸入一個整數。這裡要注意,scanf的第2個參數傳遞的不是age變數,而是age變數的地址&age,&是C語言中的一個地址運算子,可以用來擷取變數的地址

l 輸入完畢後,敲一下斷行符號鍵,目的是告訴scanf函數我們已經輸入完畢了,scanf函數會將輸入的值賦值給age變數

 

3. 其他用法

1> 用scanf函數接收3個數值,每個數值之間用中劃線-隔開

scanf("%d-%d-%d", &a, &b, &c);

3個%d之間是用中劃線-隔開的,因此我們在每輸入一個整數後都必須加個中劃線-,比如這樣輸入,不然在給變數賦值的時候會出問題

l 注意:數值之間的分隔字元是任意的,不一定要用中劃線-,可以是逗號、空格、星號*、井號#等等,甚至是英文字母

// 逗號, 

scanf("%d,%d,%d", &a, &b, &c); // 輸入格式:10,14,20  

// 井號# 

scanf("%d#%d#%d", &a, &b, &c); // 輸入格式:10#14#20  

// 字母x 

scanf("%dx%dx%d", &a, &b, &c); // 輸入格式:10x14x20

 

2> 用scanf函數接收3個數值,每個數值之間用空格隔開

scanf("%d %d %d", &a, &b, &c);

3個%d之間是用空格隔開的,我們在每輸入一個整數後必須輸入一個分隔字元,分隔字元可以是空格、tab、斷行符號

 

4. 注意

scanf的第一個參數中不要包含\n,比如scanf(“%d\n”, &a); 這將導致scanf函數無法結束

 

5. 習題

提示使用者輸入兩個整數n,然後計算並輸出兩個整數的和

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.