个人网站:
欢迎来访~

scanf函数的一般形式:scanf函数是C语言里一个标准的库函数,它的函数原型在头文件“stdio.h”中,与printf函数相同,C语言也允许在使用scanf函数之前不必包含stdio.h文件。

scanf函数的一般形式为:scanf(“格式控制字符串”,地址列表);

其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址列表中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成。

例:&a,&b;//分别表示变量a和变量b的地址。

变量地址是C编译系统分配的,用户不必关系具体地址是多少。

变量的地址和变量值的关系如下: a=567; //a为变量名,567是变量的值,&a是变量a的地址。

赋值语句左边是变量名,不能写地址,而scanf的本质也是给变量赋值,但要求写变量的地址,如&a。这两者在形式上是不同的。&是一个取地址运算符,&a是一个表达式,其功能是求变量的地址。

  • scanf函数中没有精度控制,如:scanf("%5.2f",&a);是非法的。不能企图用此语句输入小数为2的实数 ,但可以指定位数。
  • scanf函数要求给出变量地址,若给出变量名则会出错。如scanf("%d",a);是非法的,应改为scanf(”%d“,&a);才是合法的
  • 在输入多个数值数据时,若格式控制串中无非格式字符做输入数据之间的间隔则可用空格,TAB或回车做间隔。C编程在碰到空格,TAB,回车或非法数据(如对”%d“输入”12A“时,A即为非法数据)时,即认为该数据结束。
  • 在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符(空格也为字符)。
  • 如输入的数据与输出的类型不一致时,虽然编译能通过,但结果不正确。
例如:
scanf("%c%c%c",&a,&b,&c);输入为:d e f则把“d”赋予a“ ”赋予b,“e“赋予c。
只有输入为def时,才能把”d“赋予a,”e”赋予b,“f”赋予c。

描述:

C 库函数 int scanf(const char *format, ...) 从标准输入 stdin 读取格式化输入。

声明:

int scanf(const char *format, ...)

参数:

  • format -- 这是 C 字符串,包含了以下各项中的一个或多个:空格字符非空格字符 和 format 说明符。

format 说明符形式为:

[=%[*][width][modifiers]type=]

具体如下:

* :

这是一个可选的星号,表示数据是从流 stream 中读取的,但是可以被忽视,即它不存储在对应的参数中。 如:
scanf("%d %*d %d",&a,&b);
当输入为:1 2 3时,把1赋予a,2被跳过,3赋予b。

width :
这指定了在当前读取操作中读取的最大字符数。
例: scanf("%5d",&a);
输入: 12345678 则a=12345,其余部分被截去。
modifiers:
为对应的附加参数所指向的数据指定一个不同于整型(针对 d、i 和 n)、无符号整型(针对 o、u 和 x)或浮点型(针对 e、f 和 g)的大小: h :短整型(针对 d、i 和 n),或无符号短整型(针对 o、u 和 x) l :长整型(针对 d、i 和 n),或无符号长整型(针对 o、u 和 x),或双精度型(针对 e、f 和 g) L :长双精度型(针对 e、f 和 g)
长整型数据(如%ld) 和双精度浮点数(如%lf) 。
type :
一个字符,指定了要被读取的数据类型以及数据读取方式

返回值:

如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。 end of file为Ctrl+z 或者Ctrl+d。

#include<stdio.h>
int main(void)
{int a,b,c;printf("请输入三个数字:");scanf("%d, %d, %d",&a,&b,&c);printf("%d, %d, %d\n",a,b,c);return 0;
}结果如下:
请输入三个数字:1, 2, 3
1, 2, 3</code></pre>

1、&a、&b、&c 中的 & 是地址运算符,分别获得这三个变量的内存地址。
2、%d%d%d 是按十进值格式输入三个数值。输入时,在两个数据之间可以用一个或多个空格、tab 键、回车键分隔。 如果使用 , 来分隔输入的 %d, 相应的输入时也需要添加
3. 输入时 , 前一定要紧跟在数字后面,数字与 , 之间不能有空格。在用 %c 输入时,空格和"转义字符"均作为有效字符。

#include <stdio.h>int main()
{char str1[20], str2[30];printf("请输入用户名:");scanf("%s", str1);printf("请输入您的网站:");scanf("%s", str2);printf("输入的用户名:%s\n", str1);printf("输入的网站:%s", str2);return(0);
}
结果如下://
请输入用户名:admin
请输入您的网站:www.xxx.com
输入的用户名:admin
输入的网站:www.xxx.com

字符数组为什么输入时不用加&?

数组名代表数组的首地址,是一个指针,所以不用加&符号。如果是引用数组的元素,就必须得加&符。还有字符串是随机址分配。

&是表示取地址,但是char * s(或char s[10],其中s是指针,是所保存的数组的首位的地址,它本身就是一个地址,所以可以用scanf("%s",s)来输入,其中%s是针对字符数组特有的,
如下代码 int a[100];scanf("%d",a);也是可以运行的,但是输入的数据在a[0]中,因为是%d

换句话说,字符数组本身就是地址

注意:

  • 在高版本的 Visual Studio 编译器中,scanf 被认为是不安全的,被弃用,应当使用scanf_s代替 scanf。
  • 对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。
  • 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。
  • scanf函数中没有类似printf的精度控制。

更多的地址信息在了解指针后会有更深的认识



Scanf函数,取地址符和字符数组的联系相关推荐

  1. c语言函数变量地址符,C语言中取地址符做函数形参?—— 引用的讨论

    取地址符&做函数形参? C语言强大且危险 引入 这个问题花去了整整一天的研究. 先看一段严蔚敏的<数据结构>中栈的例程: 这里面的&S第一遍看的时候想当然的认为是取了SqS ...

  2. 【重温经典C语言】~c语言中%x、%c、%d、%x等等等、c语言取地址符的作用、C语言中的 联合体

    本章目录: 1. c语言中%x.%c.%d.%x等等等 2. c语言取地址符&的作用 3. 了解 C语言中的 联合体 3.1 什么是联合体? 3.2 定义 3.2.1 举例 3.3 初始化联合 ...

  3. 变量与指针、取值符与取地址符

    变量与指针.取值符与取地址符 一.基础知识 二.实例 其他 by HPC_ZY 也是偶然,在一个项目中需要多次交换二维数组中的值,逐个操作确实耗时,就想能不能利用指针操作快速交换.成功后写此文,记录分 ...

  4. c语言为什么scanf要取地址printf不用呢?

    我的猜测是 因为要引入指针的概念就必须引入地址的概念 而scanf这种赋值类的 就好像存东西也需要寄存柜的号码一样吧 也需要"地址" 不过scanf这种取地址应该也是可以交给机器判 ...

  5. 取地址符和解引用符的区别_(&)和解引用(*)运算符的地址以及C中的指针...

    取地址符和解引用符的区别 Here, we are discussing about the two most useful operators with the pointers, why and ...

  6. C语言中 指针变量 取地址符的用法 *指针变量名的用法

    文章目录 总结 Intro Code 图示 总结 众所周知,内存可以看成一个一个相邻的格子(类比Excel),而数据就存储于这些格子之中(size大的变量占用格子数多,size小就占用小).而每个格子 ...

  7. 对字符数组输入输出数组名是否加取地址符的一些理解

    字符数组名的两个含义: 定义了字符型数组char name[10].name有两个含义: 一个是代表着name这个数组第一个位置的地址,也就是name[0]的地址.可以说name就等价于&na ...

  8. scanf函数、冒泡排序和不定长度数组的使用 —— malloc

      环境:win10 + VS2019 目录 1 scanf函数理解 1.1 VS中scanf函数报错 1.2 scanf函数介绍 1.2.1 简介 1.2.2 转换说明 1.2.3 读取缓冲区数据 ...

  9. C语言加取址符的作用,C语言中指针和取地址符的关系

    一 概念定义: 严格说起来,应该这么讲:指针存的是地址,而&运算符是取变量的地址. 指针原理: 其实计算机中的内存就像一个个抽屉(一兆内存就相当于1百万个抽屉),每个抽屉都有一个编号,用于存放 ...

  10. c语言地址符作用,C语言中指针和取地址符的关系

    一 概念定义: 严格说起来,应该这么讲:指针存的是地址,而&运算符是取变量的地址. 指针原理: 其实计算机中的内存就像一个个抽屉(一兆内存就相当于1百万个抽屉),每个抽屉都有一个编号,用于存放 ...

最新文章

  1. 一个分析“文件夹”选择框实现方法的过程
  2. cd: mkdir: rmdir: rm
  3. 智能车竞赛技术报告 | 单车拉力组 - 沈阳航空航天大学 - 青梅绿茶队
  4. 第十六届智能车竞赛总决赛线上比赛赛道设计
  5. readline 库简写版本,测试可用
  6. Qt Style Sheets(qt样式表)
  7. 分布式文件系统研究-测试-搭建测试环境
  8. php 利用http上传协议(表单提交上传图片 )
  9. python 内置函数_python的内置函数、方法
  10. Service的启动 源码分析之—startService()
  11. IT运维面试问题总结-基础服务、磁盘管理、虚拟平台和系统管理
  12. API函数大全(转载)
  13. (三)python(基于面向对象)使用Requests+Xpath提取HTML内容(妹子网MM图片)
  14. 齐岳|马钱苷酸小麦麦清白蛋白纳米粒|雷公藤红素乳清白蛋白纳米粒Celastrol-whey protein
  15. CF 592D(Super M-虚树直径)
  16. [工具(前端)] 后台管理模板
  17. Python 名称空间以及函数的补充
  18. 十二星座谁最不会顾及别人感受?
  19. iPhone 12 Mini、iPhone12、iPhone12 Pro、iPhone12 Max哪个颜色好看
  20. 初学者应该如何学习法语呢?

热门文章

  1. ready等方法 微信小程序_微信小程序初步入坑指南
  2. indexOf 用法总结
  3. 安装Django 文档
  4. 确定有限状态自动机(deterministic finite automaton --> DFA)
  5. html中加入计时器,javascript怎么做计时器?
  6. java opts配置_JAVA_OPTS设置参数
  7. 运行“travel[org.apache.tomcat.maven:tomcat7 maven plugin:2.1:run]时出错:未指定项目JDK
  8. Linux:Pycharm中使用Git
  9. 数据分析师的工作职责是什么?
  10. 【深入浅出IOS开发】图片剪切