scanf()函数的用法和实践
scanf()函数的用法和实践
摘要:
本文阐述了基于ANSI,Win 95,Win NT上的 C/C++语言中scanf()函数的用法,以及在实际使用中常见错误及对策。
关键词:
scanf()
一、 序言
在CSDN论坛的C/C++版块,我时常见到“对于scanf()函数的用法、及出现的各种错误而迷惑”的帖子,萌发了我写这篇文章的念头。文中结合自身在学习和编程中对它的认识和体会,以具体示例阐述问题,目的在于使得初学者能够正确使用scanf()函数,少走不必要的弯路。
二、 scanf()函数的用法
scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。
其调用格式为: scanf("<格式化字符串>",<地址表>);
格式化字符串包括以下三类不同的字符;
1、 格式化说明符:
格式化说明符与printf()函数中的格式说明符基本相同。但和printf()函数中格式字符串的用法有一些小区别。我们来看下面这个表。
格式字符 |
说明 |
%d |
从键盘输入十进制整数 |
%o |
从键盘输入八进制整数 |
%x |
从键盘输入十六进制整数 |
%c |
从键盘输入一个字符 |
%s |
从键盘输入一个字符串 |
%f |
从键盘输入一个实数 |
%e |
与%f的作用相同 |
附加格式说明字符表
字符 |
说明 |
L |
输入"长"数据 |
H |
输入"短"数据 |
M |
指定输入数据所占宽度 |
* |
空读一个数据 |
2、 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。
3、 非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。
地址表是需要读入的所有变量的地址,而不是变量本身。这与printf()函数完全不同,要特别注意。各个变量的地址之间同","分开。
例如:
#include <stdio.h>
void main()
{
int i, j;
printf("i, j=?\n");
scanf("%d, %d", &i, &j);
}
上例中的scanf()函数先读一个整型数,然后把接着输入的逗号剔除掉,最后读入另一个整型数。如果","这一特定字符没有找到,scanf()函数就终止。若参数之间的分隔符为空格,则参数之间必须输入一个或多个空格。
说明:
(1) 对于字符串数组或字符串指针变量,由于数组名和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。
例如:
#include <stdio.h>
void main()
{
char *p, str[20];
p = new char[20];
scanf("%s", p); /*从健盘输入字符串*/
scanf("%s", str);
printf("%s\n", p); /*向屏幕输出字符串*/
printf("%s\n", str);
}
(2) 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。
如上例中若规定只能输入10字符给字符串指针p,则第一条scanf() 函数语句变为:scanf("%10s", p);
程序运行时一旦输入字符个数大于10,p就不再继续读入,而后面的一个读入函数即scanf("%s", str)就会从第11个字符开始读入。
(3) scanf()函数中没有精度控制。
如: scanf("%5.2f",&a); 是非法的。不能企图用此语句输入小数为2位的实数。
(4) scanf中要求给出变量地址,如给出变量名则会出错
如 scanf("%d",a);是非法的,应改为scnaf("%d",&a);才是合法的。
scanf()函数的用法和实践相关推荐
- [C语言] scanf 函数详解多组输入法和gitee 自荐
自荐 gitee>>> C语言学习练习: C语言学习练习 上面是我的gitee C语言仓库链接,欢迎大家来看看我写的代码.!(◦˘ ³(♡ŐωŐ♡)(给大家推荐gitee(码云)这个 ...
- scanf()函数详解
scanf()函数是所有C语言学习者在学习C语言过程中所遇到的第二个函数(第一个函数是printf(),Brian W.Kerninghan & Dennis M.Ritchie的" ...
- [转载]scanf()函数释疑[作者]------knocker
一. 序言 scanf()函数是所有C语言学习者在学习C语言过程中所遇到的第二个函数(第一个函数是printf(),Brian W.Kerninghan & Denni ...
- scanf()函数的详解以及使用时需要注意的一些细节-C语言基础
这篇文章要探讨的是"scanf()函数的详解以及使用时需要注意的一些细节".涉及scanf()函数的应用和需要注意的问题.属于C语言基础篇(持续更新). scanf()(函数原型: ...
- scanf 函数 —— 基本的输入函数
一.概述 scanf 函数和 printf函数 一样,用途广泛,其功能用一句话概括就是 " 通过键盘给程序中的变量赋值 " . 二.用法(格式) scanf 函数的两种用法,或者说 ...
- printf函数 + scanf函数
3.1 printf函数 ①printf函数显示格式串的内容,并可在该串中指定位置插入值.调用printf函数必须提供格式串,格式串后面的参数是需要在显示时插入到该串中的值. eg printf (格 ...
- c语言scanf函数源代码,C语言之可变参实现scanf函数(示例代码)
既然有printf函数可变参实现,那就一定有scanf函数的可变参实现.废话不多说,源码奉上: 本源码不过多分析,如要明白原理,请翻本博客以往的文章看说明. 欢迎关注新浪微博:http://weibo ...
- scanf 接收 空格 输入_你需要知道的scanf函数用法
scanf函数 上一节中我们讨论了,如何将整数,浮点数,字符串打印到屏幕上去.既然有输出,怎么能没有输入呢?这一节中,我们来介绍与printf相反的scanf函数. scanf的功能是将键盘输 ...
- C语言基础之--scanf函数
写代码的时候,我们可以看得出,几乎每一个C程序都会包括输入输出.输入输出是程序中最基本的操作之一.C语言本身并不提供输入输出的语句,输入输出操作是由C标准函数库中的函数来实现的.今天就先说说输入:sc ...
最新文章
- careercup-高等难度 18.5
- C 盘FAT32变为 RAW 格式
- android 延迟2秒执行_每天30秒让你更懂汽车(10自动变速器2执行装置)
- 自定义键盘keyfere——pcsensor
- 清北学堂(2019 4 28 ) part 1
- 数据结构-树:根节点、子节点、叶子节点是什么?
- qt android 应用程序图标大小,vs+qt 设置应用程序图标
- 房产管理信息系统 oracle,房地产企业项目信息管理系统|案场管理系统
- Action的mapping.findFoward(forwardName)必须要在struts-config.xml中的对应的action节点配置一个forward节点...
- nodejs安装node-gyp 报错
- 搜寻Linux软件实用指南
- Kubernetes 持久化存储是个难题,解决方案有哪些?\n
- UIView中的坐标转换
- javaweb网上购物系统,jsp网页线上购物,mysql(源码+报告)
- antdesignpro prolayout 三级菜单问题
- LinkSLA坚持用户第一,打造可持续的运维服务方案
- css代码实现3D动画翻转 - 鱿鱼游戏卡片制作
- android 设置默认语言
- 使用topGO进行GO富集分析
- 曾成功预测H1N1病毒疫情,细数这些年大数据的神应用
热门文章
- 【C++】何时需要自定义拷贝构造函数和赋值符
- 【camera-radar】基于ROS的多传感器融合感知系统实现(雷达+相机)(3)
- 【python】用numpy随机生成一元(多元)数据;如线性、指数、三角函数,或者多种样式结合
- webstorm打开新项目提示设置、是否在新窗口打开提示
- sohu广告js代码调研
- 设计模式 之美 -- 单例模式
- ReentrantLock+线程池+同步+线程锁
- 服务器 主动 推送 客户端浏览器 消息***
- reboot 百度网盘资源
- P1979 [NOIP]华容道