C语言第五节scanf函数
变量的内存分析
字节和地址
为了更好地理解变量在内存中的存储细节,先来认识一下内存中的"字节"和"地址"。
- 内存以"字节为单位"

0x表示的是十六进制,不用过于纠结,能看懂这些数字之间谁大谁小就行了
- 不同类型占用的字节是不一样的,数据越大,所需的字节数就越多
变量的存储
- 所占用字节数跟类型有关,也跟编译器环境有关

- 变量实例
int b = 10;
int a = 20;
- 内存由大到小寻址,优先分配内存地址较大的字节给变量。b的内存地址比a大
- 每个变量都有地址:第一个字节的地址就是变量的地址
- 查看内存地址:
int a;
printf("a的地址是:%p\n", &a);
- 注意
在变量未经初始化之前,不要尝试使用变量的值
int a;
printf("a的值是:%d\n", a);
上面的写法是不建议的
scanf函数
简介
这也是在stdio.h中声明的一个函数,因此使用前必须加入#include <stdio.h>。调用scanf函数时,需要传入变量的地址作为参数,scanf函数会等待标准输入设备(比如键盘)输入数据,并且将输入的数据赋值给地址对应的变量
简单用法
int age;
scanf("%d", &age);
- scanf函数时,会等待用户的键盘输入,并不会往后执行代码。scanf的第1个参数是"%d",说明要求用户以10进制的形式输入一个整数。这里要注意,个参数传递的不是age变量,而是age变量的地址&age,&是C语言中的一个地址运算符,可以用来获取变量的地址
- 输入完毕后,敲一下回车键,目的是告诉scanf函数我们已经输入完毕了,scanf函数会将输入的值赋值给age变量
其他用法
- 用scanf函数接收3个数值,每个数值之间用中划线-隔开
scanf("%d-%d-%d", &a, &b, &c);
3个%d之间是用中划线-隔开的,因此我们在每输入一个整数后都必须加个中划线-,比如这样输入
,不然在给变量赋值的时候会出问题
- 注意:数值之间的分隔符是任意的,不一定要用中划线-,可以是逗号、空格、星号*、井号#等等,甚至是英文字母
// 逗号,
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
- 用scanf函数接收3个数值,每个数值之间用空格隔开
scanf("%d %d %d", &a, &b, &c);
3个%d之间是用空格隔开的,我们在每输入一个整数后必须输入一个分隔符,分隔符可以是空格、tab、回车
注意
scanf的第一个参数中不要包含\n,比如scanf("%d\n", &a); 这将导致scanf函数无法结束
习题
提示用户输入两个整数n,然后计算并输出两个整数的和
内容来源:传智播客李明杰老师授课内容
C语言第五节scanf函数的更多相关文章
- 【C语言】05-printf和scanf函数
一.printf函数 这是在stdio.h中声明的一个函数,因此使用前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据 1.用法 1> pr ...
- 【C语言】03-printf和scanf函数
一.printf函数 这是在stdio.h中声明的一个函数,因此使用前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据 1.用法 1> pr ...
- C语言入门:05.scanf函数
一.变量的内存分析 1.字节和地址 为了更好地理解变量在内存中的存储细节,先来认识一下内存中的“字节”和“地址”. (1)内存以“字节为单位”
- 在C语言中连续使用scanf()函数出现的问题
#include<stdio.h> int main() { ],*c; printf("input string:\n"); scanf("%c" ...
- C/C++编程笔记:C语言基础printf()和scanf()函数,大学入门知识
在解释这两个函数之前,为了方便大家更容易理解,我们先来讲讲下面的这幅图. 这个图中的例子其实很简单,我们就是把题目通过输入设备(例如键盘鼠标)传输到计算机中,然后让计算机进行运算得出结果,再然后把 ...
- C语言基础printf()和scanf()函数
在程序的运行中,我们经常会进行一些输入输出的操作,用来实现交互.为此, C语言便给出了 printf() 函数和 scanf() 函数用来实现输入和输出两个动作. 其中,printf()函数用于向控制 ...
- 【C语言】gets()和scanf()函数的区别
scanf函数与gets函数 scanf函数和gets( )函数都可用于输入字符串,但在功能上有区别.若想从键盘上输入字符串"hi hello",则应该使用gets函数. gets ...
- C语言第五次作业函数
一.PTA实验作业 题目1: 6-6 使用函数输出水仙花数 1.本题PTA提交列表 2.设计思路 1.narcissistic函数 1.由于number的值后面会变化,所以定义d,e用于储存numbe ...
- c语言第五次作业--函数
一.PTA实验作业 题目1.使用函数输出一个整数的逆序数 1.本题PTA提交列表 2.设计思路 1.int mod,rever:分别表示余数和返回的数 2.while(number%10 || num ...
随机推荐
- 超简单fedora20(linux)下JDK1.8的安装
(博客园-番茄酱原创) 去官网下载linux版本的jdk,如果你的fedora是64位,就选择64位的jdk,jdk-8u20-linux-x64.tar.gz. 将下载好的jdk解压到当前目录下,解 ...
- matplotlib绘制三维图
本文参考官方文档:http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html 起步 新建一个matplotlib.figure.Figure对象, ...
- 【Hadoop代码笔记】Hadoop作业提交之TaskTracker 启动task
一.概要描述 在上篇博文描述了TaskTracker从Jobtracker如何从JobTracker获取到要执行的Task.在从JobTracker获取到LaunchTaskAction后,执行add ...
- HDU ACM 1496 Equations
Equations Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- SRM 509 DIV1 500pt(DP)
题目简述 给定一个字符串,可以对其进行修改,删除,增加操作,相应的操作有对应的花费,要求你用最小的花费把字符串变为回文串 题目做法 先搞一遍floyed把各种操作的最小花费求出来,然后就是类似编辑距离 ...
- JDBC学习笔记(4)——PreparedStatement的使用
PreparedStatement public interface PreparedStatement extends Statement;可以看到PreparedStatement是Stateme ...
- HDU 5742 It's All In The Mind (贪心)
It's All In The Mind 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5742 Description Professor Zhan ...
- RTT操作系统
http://www.rt-thread.org/官网 RT-Thread RTOS,由国内一些专业开发人员开发.维护.它不仅仅是一款 高效.稳定的实时操作系统内核,也是一套面向嵌入式系统的软件平台, ...
- 关闭Linux里边的selinux
首先我们可以用命令来查看selinux的状态 getenforce 这个命令可以查看到selinux的状态,当前可以看到是关闭状态的. 还有一个命令也可以查看出selinux的状态. sest ...
- Codeforces Round #260 (Div. 1) A. Boredom (简单dp)
题目链接:http://codeforces.com/problemset/problem/455/A 给你n个数,要是其中取一个大小为x的数,那x+1和x-1都不能取了,问你最后取完最大的和是多少. ...