C语言探索之旅 | 第一部分第六课:变量的世界(三),显示变量内容

作者 谢恩铭,公众号「程序员联盟」(微信号:coderhub)。
转载请注明出处。
原文:https://www.jianshu.com/p/497355a6ba4d

《C语言探索之旅》全系列

内容简介


  1. 用 printf 显示变量内容
  2. 用 scanf 提取程序中的输入
  3. 总结
  4. 第一部分第七课预告

1. 用 printf 显示变量内容


变量相关的内容有点多,经过上一课 C语言探索之旅 | 第一部分第五课:变量的世界(二),变量声明 ,今天我们来学习变量的最后一个知识点:显示变量内容。

在上几课中,我们已经知道了如何用 printf 函数在屏幕上显示内容。但那时候还只是显示一些简单的文字,比如“Hello World”,“你好吗”,“饭吃了没”,等等。

下面我们来学习如何用 printf 函数来显示变量内容。

用 printf 来显示变量内容其实也是类似,只不过在我们要插入变量内容的地方要用一个特殊符号代替,例如:

printf("你有 %d 只狗");

这里的特殊符号其实是 % 加上一个字母(上例中是 d),这个字母表明要显示什么类型,d 表示要显示整数。下表列出了一些常用的字母和对应的变量类型:

格式 类型
%d int
%ld long
%f float
%f double

可以看到用于显示 float(单精度浮点数)和 double(双精度浮点数)的符号是一样的(因为说到底它们都是浮点数嘛)。

在适当的时候,我们还会介绍其他的符号,暂时只需要记得这几个就够了。

我们差不多要完工了。我们在确切的位置指明了我们要显示一个整数,但是我们还没指定要显示哪一个数。所以上面的代码还不完整,必须告诉 printf 函数我们要显示的变量。

其实也很简单,我们只需要在双引号后面再写一个逗号,在逗号后面写上我们要显示的变量的名字,如下:

printf("你有 %d 只狗", numberOfDogs);

程序运行时,printf 函数就会把 %d 替换成变量 numberOfDogs 的值了。

我们用一个完整的程序来测试一下:

#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;
}

运行以上程序,屏幕会显示:

你有 5 只狗
**** 跑了一只狗 ****
啊呀,你只剩下 4 只狗了

很简单吧!

显示多个变量


用一个 printf 函数也可以显示多个变量的值

如下

int main(int argc, char *argv[])
{
    int numberOfDogs = 5, numberOfCats = 6;
    printf("你有 %d 只狗,还有 %d 只猫\n", numberOfDogs, numberOfCats);

    return 0;
}

运行,输出:

你有 5 只狗,还有 6 只猫

2. 用 scanf 提取程序中的输入


从现在开始,变量对我们会越来越重要,也会越来越有意思。

我们来学习这一课的最后一个知识点:如何提取用户输入的值,并将其储存到变量里面。

为了能够让用户在控制台输入,我们需要借助另一个函数:scanf 。

这个函数和 printf 函数算是一对,用法有点类似。scanf 负责输入,printf 负责输出。

给出一个 scanf 使用的例子:

int numberOfDogs = 0;
scanf("%d", &numberOfDogs);

是不是和 printf 很类似呢,但是我们注意到了,numberOfDogs 前面多了一个 & 符号。为什么 printf 里面变量名前不需要这个符号而 scanf 却需要呢?

回答是:这个符号的作用暂时不必深究,知道 scanf 是这样用就好,以后的课程我们再一起学习。相信我,如果我们一定要讲的话,今天的课就结束不了了。

scanf 和 printf 函数还有一点差异:

对于 float 和 double 来说,printf 里面他们的替代符号都是 %f, 但是在 scanf 里面却不一样。在 scanf 中,float 是 %f,而 double 是 %lf 。

例如:

double sum = 0;
scanf("%lf", &sum);

下面是一个完整的例子,演示如何用 scanf 提取用户输入,存储到变量中,再用 printf 函数输出变量的值:

int main(int argc, char *argv[])
{
    int sum = 0; // 把钱数初始化为零

    printf("你身上有多少钱 ? ");
    scanf("%d", &sum);   // 请求用户输入钱数
    printf("你有 %d 块钱啊,那还不快快地交出来 !\n", sum);
        
    return 0;
}

运行,程序会先显示“你身上有多少钱 ?”,然后光标会停在后面,等待用户输入;用户输入数据之后,按回车,printf 那句话才会显示,如下:

你身上有多少钱 ? 12000
你有 12000 块钱啊,那还不快快地交出来 !

好了,你应该已经明白了大致的原理。多亏了 scanf 函数,我们的程序可以和用户交互啦!

还要注意 scanf 的一个“任性”的地方,就是虽然上例中我们指定了用户输入整数类型,但是假如用户输入的是其他类型,scanf 也不会出错:

  • 比如说用户输入 5600.45,这是一个浮点数,不是整数,但是 scanf 还是会将其读入,但是储存在 sum 变量里的数会变成 5600(舍去了小数部分,只保留整数部分)。

  • 同样的,假如用户输入一些奇怪的字符,例如:g^b@&* ,那变量 sum 的值就不会变,还是它的初始值(上例中是 0,因为我们初始化 sum 为 0, 假如没有初始化,那 sum 的值会是任意的)。

3. 总结


“变量的世界”系列终于结束了,我们回顾一下重要的知识点:

  1. 我们的电脑有好几种不同的存储器类型,从速度最快到最慢排序是:寄存器,高速缓存,内存,硬盘。

  2. 硬盘中的数据不会随电脑关机而消失,其他三类存储器都是暂时性的储存。

  3. 为了存储信息,我们的电脑需要把数据存放在存储器里,一般暂时的数据都是存放到内存里,当然也可能存放到寄存器或者高速缓存中,我们不用操心,电脑自会分配。

  4. 在我们的源代码中,变量指的是暂时存放在内存中(主要),在程序运行期间值会改变的数据。

  5. 我们也有 constant 变量(只读变量,不是常量),值在程序运行期间不会改变。

  6. 变量有好多类型,每种类型在内存中所占据的空间大小不一样。一般来说,int 类型是声明整数的首选,而 double 类型是声明浮点数的首选。

  7. scanf 函数使用户可以输入数据,printf 函数输出数据。

4. 第一部分第七课预告


今天的课就到这里,一起加油吧!

下一课:C语言探索之旅 | 第一部分第七课:运算那点事


我是 谢恩铭,公众号「程序员联盟」(微信号:coderhub)运营者,慕课网精英讲师 Oscar 老师,终生学习者。
热爱生活,喜欢游泳,略懂烹饪。
人生格言:「向着标杆直跑」

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容