scanf 函数称为格式输入函数,即把用户键盘输入的内容保存到指定的变量中。

scanf 函数签名

scanf("格式控制字符串", 变量地址列表)

  scanf 函数是一个标准库函数,函数原型位于 <stdio.h> 中。与 printf 函数相同,C语言允许隐式使用 scanf 函数,即可以不提前包含 <stido.h> 头文件。如果隐式使用 scanf 或 printf 函数,编译时系统会发出隐式调用警告。

  scanf 不能在控制台回显非格式化占位符字符串,也就是说不能在控制台显示输入提示。

  scanf 第一个参数 “格式控制字符串” 可以分为两部分,一部分为格式占位符,另一部分为变量分隔符。

格式占位符

%[*][输入数据宽度][长度]类型

  scanf 支持输入的类型如下:

    1. d - 十进制整数

    2. o - 八进制整数

    3. x - 十六进制整数

    4. u - 无符号十进制整数

    5. f 或 e - 小数形式或指数形式的实型数

    6. c - 单个字符

    7. s - 字符串

变量分隔符

  变量分隔符是指在输入多个变量数据时用于分隔输入数据的非格式占位符。例如:

scanf("%dA%d", &a, &b)

在控制台输入:
123A456 结果为:a = , b =

  

  其中 scanf 第一个参数中的 A 就是一个变量分隔符。如果 scanf 第一个参数中没有指明变量分隔符,那么系统默认空格符、Tab符或回车符作为分隔符,C编译器在遇到这三个字符或者非法字符时,就认为输入的数据结束。例如:

scanf("%d%d", &a, &b);

在控制台输入:

或者

结果都是:a = , b = 

scanf 函数实例

1. 一般用法

int main(void) {
int a, b;
printf("Input a, b\n");
scanf("%d%d", &a, &b);
printf("a=%d, b=%d\n", a, b);
return ;
}

  输入与输出:

$ ./a.out
Input a, b a=, b=

2. 使用 * 符号表示跳过该输入值

  将上例代码修改为:

scanf("%d%*d%d", &a, &b)

  输入与输出:跳过第二个输入值 456, 将第三个输入值 789 赋给了变量 b。

$ ./a.out
Input a, b a=, b=

3. 格式占位符中限定数据宽度

  将上例代码修改为:

scanf("%4d%4d", &a, &b);

  输入与输出:

$ ./a.out
Input a, b a=, b= $ ./a.out
Input a, b a=, b=

  第一次输入时,C程序直接截取了 12345 的前四位赋给了变量 a,然后从剩余的 5 56789 中准备再截取四位赋给变量 b,但在第二个位置遇到了空格符,之前说过C程序是默认空格符为数据分隔符,因此C程序认为该变量数据输入结束,将 5 赋给了b。

  

[C] scanf - 格式输入函数的更多相关文章

  1. C++入门经典-例2.4-使用scanf格式输入函数得到用户输入的数据

    1:puts函数可以输出提示信息的字符串. 2:代码如下: // 2.4.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" int main( ...

  2. scanf格式控制符的完整格式

    scanf格式控制的完整格式: %     *     m     l或h     格式字符 ①格式字符与printf函数中的使用方式相同,以%d.%o.%x.%c.%s.%f.%e,无%u格式.%g ...

  3. scanf格式控制符

    格式控制 . %d %o %x %c %s %f %e 无%u格式.%g格式 . scanf("%3d%3d", &a, &b); 输入: //a=123,b=45 ...

  4. scanf格式控制符之%[]的应用

    考虑只读入小写字母的字符串,这个问题要如何用scanf解决呢? 这就用到了%[] 这个格式控制符,它支持a-z这样的格式控制 char s[111]; scanf("%[a-z]" ...

  5. printf/scanf格式

    (1)打印字符 char c; printf("%c",c); (2)打印整形 int i; printf("%d",i); //有符号十进制数 printf( ...

  6. 《UNIX环境高级编程》笔记——2.标准和实现

    随着UNIX各种衍生版本不断发展壮大,标准化工作就十分必要.其实干啥事都是这样,玩的人多了,必须进行标准化. 一.UNIX标准 1.1 ISO C(ANSI C) ANSI:Amerocan Nato ...

  7. Standard C 语言标准函数库介绍

    全面巩固所知所学,往精通方向迈进! Standard C 语言标准函数库速查 (Cheat Sheet) from:http://ganquan.info/standard-c/function/ C ...

  8. C89标准库函数手册(待整理)

    http://zh.cppreference.com/w/c 前言 ANSI C(C89)标准库函数共有15个头文件.这15个头文件分别为: 1.<assert.h>            ...

  9. Standard C 语言标准函数库速查(彩色的函数列表,十分清楚)

    Standard C 语言标准函数库速查 (Cheat Sheet) wcstombs 函数说明 #include <stdlib.h> size_t mbstowcs(wchar_t * ...

随机推荐

  1. SpringMVC系列(十二)自定义拦截器

    Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口– preHandle():这个方法在业务处 ...

  2. Spring JDBC ResultSetExtractor接口示例

    org.springframework.jdbc.core.ResultSetExtractor接口是JdbcTemplate的查询方法使用的回调接口.此接口的实现执行从ResultSet提取结果的实 ...

  3. 转换基于Maven的Web应用程序支持Eclipse IDE

    在上一节教程中,使用Maven创建了一个Web应用程序.这里有一个指南,告诉你如何转换Web应用程序到Eclipse IDE支持的形式. 注意,通过WTP工具Eclipse IDE支持Web应用程序, ...

  4. e828. 创建JTabbedPane

    A tabbed pane is a container that displays only one child component at a time. Typically, the childr ...

  5. Java虚拟机性能管理神器 - VisualVM(2) 入门

    一下载VisualVM 最新版本下载 历史版本下载 二启动VisualVM 三VisualVM用户目录 四VisualVM窗口 1应用程序窗口 2详情窗口 五VisualVM插件   Java虚拟机性 ...

  6. EF学习和使用综合

    一.(引)你必须知道的EF知识和经验 二.(引)EF学习和使用(七)EF性能优化篇 三.(引)采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延 ...

  7. u3d Mecanim动画

    作为Unity4.0的主要更新功能,Mecanim动画被寄予了很多的期望.系统有先进的地方,也有不足的地方.这些我们留到最后再来总结. 阿赵粗略的学习了一下,写下以下的教程.这篇教程简单的说明了Mec ...

  8. Objective-C语法之NSDictionary和NSMutableDictionary

    Java 有Map,可以把数据以键值对的形式储存起来,取值的时候通过key就可以直接拿到对应的值,方便快捷.在Objective-C语言中,词典就是做这样的事情的,和NSArray一样,一个词典对象也 ...

  9. 超分辨率论文CVPR-Kai Zhang

    深度学习与传统方法结合的超分辨率:Kai Zhang 1. (CVPR, 2019) Deep Plug-and-Play Super-Resolution for Arbitrary https:/ ...

  10. 系统安装SQL Sever2000后1433端口未开放,如何打开1433端口的解决方法

    这篇文章主要针对Win2003系统安装SQL Sever2000后1433端口未开放,如何打开1433端口的解决方法. 用了几年的Windows2003和SQL Server2000了,不过这个问题倒 ...