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()函数的用法和实践相关推荐

  1. [C语言] scanf 函数详解多组输入法和gitee 自荐

    自荐 gitee>>> C语言学习练习: C语言学习练习 上面是我的gitee C语言仓库链接,欢迎大家来看看我写的代码.!(◦˘ ³(♡ŐωŐ♡)(给大家推荐gitee(码云)这个 ...

  2. scanf()函数详解

    scanf()函数是所有C语言学习者在学习C语言过程中所遇到的第二个函数(第一个函数是printf(),Brian W.Kerninghan & Dennis M.Ritchie的" ...

  3. [转载]scanf()函数释疑[作者]------knocker

    一.             序言 scanf()函数是所有C语言学习者在学习C语言过程中所遇到的第二个函数(第一个函数是printf(),Brian W.Kerninghan & Denni ...

  4. scanf()函数的详解以及使用时需要注意的一些细节-C语言基础

    这篇文章要探讨的是"scanf()函数的详解以及使用时需要注意的一些细节".涉及scanf()函数的应用和需要注意的问题.属于C语言基础篇(持续更新). scanf()(函数原型: ...

  5. scanf 函数 —— 基本的输入函数

    一.概述 scanf 函数和 printf函数 一样,用途广泛,其功能用一句话概括就是 " 通过键盘给程序中的变量赋值 " . 二.用法(格式) scanf 函数的两种用法,或者说 ...

  6. printf函数 + scanf函数

    3.1 printf函数 ①printf函数显示格式串的内容,并可在该串中指定位置插入值.调用printf函数必须提供格式串,格式串后面的参数是需要在显示时插入到该串中的值. eg printf (格 ...

  7. c语言scanf函数源代码,C语言之可变参实现scanf函数(示例代码)

    既然有printf函数可变参实现,那就一定有scanf函数的可变参实现.废话不多说,源码奉上: 本源码不过多分析,如要明白原理,请翻本博客以往的文章看说明. 欢迎关注新浪微博:http://weibo ...

  8. scanf 接收 空格 输入_你需要知道的scanf函数用法

    scanf函数   上一节中我们讨论了,如何将整数,浮点数,字符串打印到屏幕上去.既然有输出,怎么能没有输入呢?这一节中,我们来介绍与printf相反的scanf函数.   scanf的功能是将键盘输 ...

  9. C语言基础之--scanf函数

    写代码的时候,我们可以看得出,几乎每一个C程序都会包括输入输出.输入输出是程序中最基本的操作之一.C语言本身并不提供输入输出的语句,输入输出操作是由C标准函数库中的函数来实现的.今天就先说说输入:sc ...

最新文章

  1. careercup-高等难度 18.5
  2. C 盘FAT32变为 RAW 格式
  3. android 延迟2秒执行_每天30秒让你更懂汽车(10自动变速器2执行装置)
  4. 自定义键盘keyfere——pcsensor
  5. 清北学堂(2019 4 28 ) part 1
  6. 数据结构-树:根节点、子节点、叶子节点是什么?
  7. qt android 应用程序图标大小,vs+qt 设置应用程序图标
  8. 房产管理信息系统 oracle,房地产企业项目信息管理系统|案场管理系统
  9. Action的mapping.findFoward(forwardName)必须要在struts-config.xml中的对应的action节点配置一个forward节点...
  10. nodejs安装node-gyp 报错
  11. 搜寻Linux软件实用指南
  12. Kubernetes 持久化存储是个难题,解决方案有哪些?\n
  13. UIView中的坐标转换
  14. javaweb网上购物系统,jsp网页线上购物,mysql(源码+报告)
  15. antdesignpro prolayout 三级菜单问题
  16. LinkSLA坚持用户第一,打造可持续的运维服务方案
  17. css代码实现3D动画翻转 - 鱿鱼游戏卡片制作
  18. android 设置默认语言
  19. 使用topGO进行GO富集分析
  20. 曾成功预测H1N1病毒疫情,细数这些年大数据的神应用

热门文章

  1. 【C++】何时需要自定义拷贝构造函数和赋值符
  2. 【camera-radar】基于ROS的多传感器融合感知系统实现(雷达+相机)(3)
  3. 【python】用numpy随机生成一元(多元)数据;如线性、指数、三角函数,或者多种样式结合
  4. webstorm打开新项目提示设置、是否在新窗口打开提示
  5. sohu广告js代码调研
  6. 设计模式 之美 -- 单例模式
  7. ReentrantLock+线程池+同步+线程锁
  8. 服务器 主动 推送 客户端浏览器 消息***
  9. reboot 百度网盘资源
  10. P1979 [NOIP]华容道