作者 謝恩銘问芬,公眾號(hào)「程序員聯(lián)盟」(微信號(hào):coderhub)。
轉(zhuǎn)載請(qǐng)注明出處寿桨。
原文:http://www.reibang.com/p/497355a6ba4d
《C語言探索之旅》全系列
內(nèi)容簡(jiǎn)介
- 用 printf 顯示變量?jī)?nèi)容
- 用 scanf 提取程序中的輸入
- 總結(jié)
- 第一部分第七課預(yù)告
1. 用 printf 顯示變量?jī)?nèi)容
變量相關(guān)的內(nèi)容有點(diǎn)多此衅,經(jīng)過上一課 C語言探索之旅 | 第一部分第五課:變量的世界(二),變量聲明 亭螟,今天我們來學(xué)習(xí)變量的最后一個(gè)知識(shí)點(diǎn):顯示變量?jī)?nèi)容挡鞍。
在上幾課中,我們已經(jīng)知道了如何用 printf 函數(shù)在屏幕上顯示內(nèi)容预烙。但那時(shí)候還只是顯示一些簡(jiǎn)單的文字墨微,比如“Hello World”,“你好嗎”扁掸,“飯吃了沒”翘县,等等。
下面我們來學(xué)習(xí)如何用 printf 函數(shù)來顯示變量?jī)?nèi)容谴分。
用 printf 來顯示變量?jī)?nèi)容其實(shí)也是類似锈麸,只不過在我們要插入變量?jī)?nèi)容的地方要用一個(gè)特殊符號(hào)代替,例如:
printf("你有 %d 只狗");
這里的特殊符號(hào)其實(shí)是 % 加上一個(gè)字母(上例中是 d)狸剃,這個(gè)字母表明要顯示什么類型掐隐,d 表示要顯示整數(shù)。下表列出了一些常用的字母和對(duì)應(yīng)的變量類型:
格式 | 類型 |
---|---|
%d | int |
%ld | long |
%f | float |
%f | double |
可以看到用于顯示 float(單精度浮點(diǎn)數(shù))和 double(雙精度浮點(diǎn)數(shù))的符號(hào)是一樣的(因?yàn)檎f到底它們都是浮點(diǎn)數(shù)嘛)钞馁。
在適當(dāng)?shù)臅r(shí)候虑省,我們還會(huì)介紹其他的符號(hào),暫時(shí)只需要記得這幾個(gè)就夠了僧凰。
我們差不多要完工了探颈。我們?cè)诖_切的位置指明了我們要顯示一個(gè)整數(shù),但是我們還沒指定要顯示哪一個(gè)數(shù)训措。所以上面的代碼還不完整伪节,必須告訴 printf 函數(shù)我們要顯示的變量光羞。
其實(shí)也很簡(jiǎn)單,我們只需要在雙引號(hào)后面再寫一個(gè)逗號(hào)怀大,在逗號(hào)后面寫上我們要顯示的變量的名字纱兑,如下:
printf("你有 %d 只狗", numberOfDogs);
程序運(yùn)行時(shí),printf 函數(shù)就會(huì)把 %d 替換成變量 numberOfDogs 的值了化借。
我們用一個(gè)完整的程序來測(cè)試一下:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int numberOfDogs = 5; // 一開始潜慎,你有5只狗
printf("你有 %d 只狗\n", numberOfDogs);
printf("**** 跑了一只狗 ****\n");
numberOfDogs = 4; // 剛跑了一只狗,只有4只了
printf("啊呀蓖康,你只剩下 %d 只狗了\n", numberOfDogs);
return 0;
}
運(yùn)行以上程序铐炫,屏幕會(huì)顯示:
你有 5 只狗
**** 跑了一只狗 ****
啊呀,你只剩下 4 只狗了
很簡(jiǎn)單吧蒜焊!
顯示多個(gè)變量
用一個(gè) printf 函數(shù)也可以顯示多個(gè)變量的值
如下
int main(int argc, char *argv[])
{
int numberOfDogs = 5, numberOfCats = 6;
printf("你有 %d 只狗倒信,還有 %d 只貓\n", numberOfDogs, numberOfCats);
return 0;
}
運(yùn)行,輸出:
你有 5 只狗泳梆,還有 6 只貓
2. 用 scanf 提取程序中的輸入
從現(xiàn)在開始鳖悠,變量對(duì)我們會(huì)越來越重要,也會(huì)越來越有意思鸭丛。
我們來學(xué)習(xí)這一課的最后一個(gè)知識(shí)點(diǎn):如何提取用戶輸入的值竞穷,并將其儲(chǔ)存到變量里面。
為了能夠讓用戶在控制臺(tái)輸入鳞溉,我們需要借助另一個(gè)函數(shù):scanf 瘾带。
這個(gè)函數(shù)和 printf 函數(shù)算是一對(duì),用法有點(diǎn)類似熟菲。scanf 負(fù)責(zé)輸入看政,printf 負(fù)責(zé)輸出。
給出一個(gè) scanf 使用的例子:
int numberOfDogs = 0;
scanf("%d", &numberOfDogs);
是不是和 printf 很類似呢抄罕,但是我們注意到了允蚣,numberOfDogs 前面多了一個(gè) & 符號(hào)。為什么 printf 里面變量名前不需要這個(gè)符號(hào)而 scanf 卻需要呢呆贿?
回答是:這個(gè)符號(hào)的作用暫時(shí)不必深究嚷兔,知道 scanf 是這樣用就好,以后的課程我們?cè)僖黄饘W(xué)習(xí)做入。相信我冒晰,如果我們一定要講的話,今天的課就結(jié)束不了了竟块。
scanf 和 printf 函數(shù)還有一點(diǎn)差異:
對(duì)于 float 和 double 來說壶运,printf 里面他們的替代符號(hào)都是 %f, 但是在 scanf 里面卻不一樣浪秘。在 scanf 中蒋情,float 是 %f埠况,而 double 是 %lf 。
例如:
double sum = 0;
scanf("%lf", &sum);
下面是一個(gè)完整的例子棵癣,演示如何用 scanf 提取用戶輸入辕翰,存儲(chǔ)到變量中,再用 printf 函數(shù)輸出變量的值:
int main(int argc, char *argv[])
{
int sum = 0; // 把錢數(shù)初始化為零
printf("你身上有多少錢 ? ");
scanf("%d", &sum); // 請(qǐng)求用戶輸入錢數(shù)
printf("你有 %d 塊錢啊狈谊,那還不快快地交出來 !\n", sum);
return 0;
}
運(yùn)行金蜀,程序會(huì)先顯示“你身上有多少錢 ?”,然后光標(biāo)會(huì)停在后面的畴,等待用戶輸入;用戶輸入數(shù)據(jù)之后尝胆,按回車丧裁,printf 那句話才會(huì)顯示,如下:
你身上有多少錢 ? 12000
你有 12000 塊錢啊含衔,那還不快快地交出來 !
好了煎娇,你應(yīng)該已經(jīng)明白了大致的原理。多虧了 scanf 函數(shù)贪染,我們的程序可以和用戶交互啦缓呛!
還要注意 scanf 的一個(gè)“任性”的地方,就是雖然上例中我們指定了用戶輸入整數(shù)類型杭隙,但是假如用戶輸入的是其他類型哟绊,scanf 也不會(huì)出錯(cuò):
比如說用戶輸入 5600.45,這是一個(gè)浮點(diǎn)數(shù)痰憎,不是整數(shù)票髓,但是 scanf 還是會(huì)將其讀入,但是儲(chǔ)存在 sum 變量里的數(shù)會(huì)變成 5600(舍去了小數(shù)部分铣耘,只保留整數(shù)部分)洽沟。
同樣的,假如用戶輸入一些奇怪的字符蜗细,例如:
g^b@&*
裆操,那變量 sum 的值就不會(huì)變,還是它的初始值(上例中是 0炉媒,因?yàn)槲覀兂跏蓟?sum 為 0, 假如沒有初始化踪区,那 sum 的值會(huì)是任意的)。
3. 總結(jié)
“變量的世界”系列終于結(jié)束了橱野,我們回顧一下重要的知識(shí)點(diǎn):
我們的電腦有好幾種不同的存儲(chǔ)器類型朽缴,從速度最快到最慢排序是:寄存器,高速緩存水援,內(nèi)存密强,硬盤茅郎。
硬盤中的數(shù)據(jù)不會(huì)隨電腦關(guān)機(jī)而消失,其他三類存儲(chǔ)器都是暫時(shí)性的儲(chǔ)存或渤。
為了存儲(chǔ)信息系冗,我們的電腦需要把數(shù)據(jù)存放在存儲(chǔ)器里,一般暫時(shí)的數(shù)據(jù)都是存放到內(nèi)存里薪鹦,當(dāng)然也可能存放到寄存器或者高速緩存中掌敬,我們不用操心,電腦自會(huì)分配池磁。
在我們的源代碼中奔害,變量指的是暫時(shí)存放在內(nèi)存中(主要),在程序運(yùn)行期間值會(huì)改變的數(shù)據(jù)地熄。
我們也有 constant 變量(只讀變量华临,不是常量),值在程序運(yùn)行期間不會(huì)改變端考。
變量有好多類型雅潭,每種類型在內(nèi)存中所占據(jù)的空間大小不一樣。一般來說却特,int 類型是聲明整數(shù)的首選扶供,而 double 類型是聲明浮點(diǎn)數(shù)的首選。
scanf 函數(shù)使用戶可以輸入數(shù)據(jù)裂明,printf 函數(shù)輸出數(shù)據(jù)椿浓。
4. 第一部分第七課預(yù)告
今天的課就到這里,一起加油吧漾岳!
下一課:C語言探索之旅 | 第一部分第七課:運(yùn)算那點(diǎn)事
我是 謝恩銘轰绵,公眾號(hào)「程序員聯(lián)盟」(微信號(hào):coderhub)運(yùn)營者,慕課網(wǎng)精英講師 Oscar 老師尼荆,終生學(xué)習(xí)者左腔。
熱愛生活,喜歡游泳捅儒,略懂烹飪液样。
人生格言:「向著標(biāo)桿直跑」