scanf用法简介

article/2025/8/26 14:36:14

scanf是一个变参函数,参数的数量和类型是不确定的

scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。

功能

函数 scanf() 是从标准输入流stdin(标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。 

函数参数:

函数的第一个参数是格式字符串,它指定了输入的格式,第二个参数是先把输入的字符串和第一个参数进行匹配然后进行转换,转换完成后,第二个参数表示的就是数据要存放的位置。函数的返回值是int

域宽:

以一个非零的十进制整数形式出现。表示该格式指令最多读入的字符数。

格式说明符:

c 读入域宽指定的数目个字符组成的字符序列(后面不会加上空字节),如果省略宽度则读入单字符。如%c或%1c读入单字符,%2c读入两个字符(后面不会加上空字节),以此类推。

s读入一个的字符序列,后面会加上空字节,遇到空白字符(\t \r \n 空格等)完成读取。

d 读入有符号十进制整数。

u 读入无符号十进制整数。

f  读入有符号浮点数。

o 读入有符号八进制整数。

x,X读入有符号十六进制整数。

p 读入一个指针值。

% 读入% 符号(百分号)

长度修饰符:

hh与d,o, u, x, X配合使用,表示对应一个signed char或unsigned char数据。

h与d,o, u, x, X配合使用,表示对应一个short int或unsigned short int数据。

l 与d,o, u, x, X配合使用,表示对应一个long int或unsigned long int数据,和f配合使用表示对应一个double数据。

ll与d,o, u, x, X配合使用,表示对应一个long long int或unsigned long long int数据。

如:

使用函数时:

第一步: "%d %ld %f %lf"此时中间使用空格间隔,输入时也需要用空格进行分割,scanf是直接把转换结果送到接收变量中,所以使用必须规范。开始输入的字符串和第一个参数对应,假设输入的是1 2 3.0 4.0。1就和"%d"对应,2和%ld对应,3.0和%f对应,4.0和%lf对应。1对应"%d",将转换为int类型的二进制(00000000 00000000 00000000 00000001)表示,int大小4字节。

第二步:把转换得到的二进制放入对应需要存放的空间中,scanf中要求给出变量地址,所以不是数组的一般都要加上&,而对于数组,由于数组名本身就是地址,所以不用&。用对应类型的变量来接收转换结果才能保证结果的准确,否则可能发生如4字节放到2字节里发生截断的情况。

第三步:scanf()函数返回的值为:正确按指定格式输入变量的个数。

例如:

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

如果a和b都被成功读入,那么scanf()的返回值就是2;

如果只有a被成功读入,返回值为1;

如果a和b都未被成功读入,返回值为0;

如果遇到错误或遇到end of file,返回值为EOF。EOF是一个预定义的常量,等于-1。

通过转到定义我们可以看到它的值 

我们可以通过判断它的返回值来实现多组打印,如:

while(scanf("%d%d", &a, &b)!=EOF)

在windows系统中,我们可以通过按下Ctrl+Z和回车键来模拟EOF条件

注意点:

1.printf的参数由于比int小的变量会整形提升,float精度也会升级为double。所以,d可以用于char,short,int。f可以用于float和double。但scanf是直接把转换结果送到接收变量中,所以使用必须规范。

2. scanf函数中没有类似printf的精度控制。

如: scanf("%5.2f",&a); 是非法的。

3.在高版本的 Visual Studio 编译器中,scanf 被认为是不安全的,被弃用,编译器会推荐你使用scanf_s代替 scanf。

但是在C语言标准中并没有’scanf_s’,而这是由VS编译器所提供的,因此在其他编译器中将无法识别’scanf_s’,故在VS编译器中使用’scanf_s’使程序的可移植性大受影响。

我们可以在程序的第一行(开头)使用下面这句话,就可以正常使用scanf

#define _CRT_SECURE_NO_WARNINGS 1


http://chatgpt.dhexx.cn/article/G80LBJfu.shtml

相关文章

Navicat中将一个mysql数据库中的表复制到另一个数据库中

比如想要把本地的opera数据库中的表复制到云服务器中的mysql中&#xff0c;可以先在云服务器mysql中新建名为“opera”的数据库&#xff0c;再将本地的表复制进来 方式1&#xff1a; 点击“工具”-“数据传输” 刷新数据库&#xff0c;可以看到表复制进来了 方式2&#xff1a;…

mysql 数据表的复制

现在有两个数据库python01 、python02**目标&#xff1a;python01的student表复制到python02数据库下** 这是python01的数据结构与数据 有两种方法介绍给大家 第二种方法可推进你们使用&#xff1a; 方法一&#xff1a; create table student02 select * from python01.stud…

Mysql复制表中数据给另一张表

&#x1f4dc;个人简介 ⭐️个人主页&#xff1a;摸鱼の文酱博客主页&#x1f64b;‍♂️ &#x1f351;博客领域&#xff1a;java编程基础,mysql &#x1f345;写作风格&#xff1a;干货,干货,还是tmd的干货 &#x1f338;精选专栏&#xff1a;【Java】【mysql】 【算法刷题…

mysql如何复制一张表的数据到新的表

表test1 让表test1中id大于5的数据复制到表test2中 test2表无需新创建 CREATE TABLE test2 SELECT * FROM test1 where id >5让表test1中id大于5的数据复制到表test2中id CREATE TABLE test2 SELECT id FROM test1 where id >5一个新的表结构和字段取决去select 后给…

Mysql表和数据的复制操作

准备测试数据时候&#xff0c;需要经常对数据库中的表结构以及表中数据进行复制、删除等操作&#xff0c;现对常用的操作总结一下&#xff1a; 数据库中已经存在一个表A&#xff0c;表结构及数据如下&#xff1a; 1、创建新表B&#xff0c;从A表复制结构&#xff0c;不复制数…

MySQL复制表结构表数据

&#x1f388;准备工作 新建一张 student 表&#xff0c;建表语句如下&#xff1a; CREATE TABLE student (id int(20) NOT NULL,name varchar(30) COLLATE utf8_bin DEFAULT NULL,tid int(10) DEFAULT NULL,PRIMARY KEY (id),KEY fktid (tid),CONSTRAINT fktid FOREIGN KEY …

MySQL复制表

当我们要创建一张一模一样的表的时候我们不仅可以使用 show create table表名的方式查看建表源码的方式copy表我们还可以直接用代码copy&#xff0c;我总结了比较常用的三种copy表的方式 table_a表数据&#xff1a; 方式一&#xff1a; # 方式一 CREATE TABLE table_a_copy4 …

MySQL复制表3种方式

本节目标 1.掌握MySQL复制表的几种方式 复制表&#xff0c;即备份表&#xff0c;给我们在操作表的时候&#xff0c;留一条后路 复制表的三种方式&#xff1a; 1.只复制表结构 create table tableName like someTable; 2.只复制表数据 create table tableName select * from …

MySQL:如何复制表的部分或全部数据到其他表里?

文章目录 复制表分三种情况&#xff1a;1、复制原有表t_test的结构到另一张表t_testx(x1,2,......)&#xff0c;2、复制原有表t_test的数据到表t_testx(x1,2,......)&#xff0c;有两种情况&#xff0c;3、复制原有表t_test的结构及数据到另一张表t_testx(x1,2,......)&#xf…

mysql 复制表的几种方式

1. 下面这个语句会拷贝表结构到新表newadmin中。 (不会拷贝表中的数据) CREATE TABLE newadmin LIKE admin 2. 下面这个语句会拷贝数据到新表中。 注意&#xff1a;这个语句其实只是把select语句的结果建一个表。所以newadmin这个表不会有主键&#xff0c;索引。 CREATE TAB…

MySQL中复制表的方式你知道几种

mysql 想必大家比较熟悉了&#xff0c; 我们常见的crud sql 想必大家也是手到拈来。 但是我在今儿上数据库课的时候&#xff0c;我好像连mysql中复制表的基础写法 都不会。 可能工作中不常用&#xff0c;但作为基础 还是想写出来分享给大家。 这里 我介绍四种常用的复制表的方…

mysql复制表的几种方式

mysql复制表的几种方式 所描述的方法还请实际测试一下再使用. 1、复制表结构及数据到新表 CREATE TABLE 新表SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来&#xff0c;当然我们可以用delete from newtable;来删除。 新表中没有了旧表的primary key、Ex…

无线WiFi怎样实现实名认证?

不管是企业内网的私有WiFi&#xff0c;还是公共WiFi网络&#xff1b;出于安全性需要以及相关政策法规的要求&#xff0c;都要对WiFi无线上网的用户进行实名认证。本文中&#xff0c;我将结合WSG上网行为管理网关介绍如何实现无线WiFi的实名认证。 1. 微信连WiFi 腾讯从2014年退…

无线技术—安全认证技术

1、为什么要保护WLAN网络&#xff1f; 1&#xff09;防止信息窃取&#xff1a; 通过软件侦听无线信息 通信内容反向解密 2&#xff09;防止未经过授权的访问&#xff1a; 非法用户接入 越权访问资源 3&#xff09;提供稳定高效的无线接入&#xff1a; 非法AP等信息干扰导致信号…

论校园网如何实现免认证

一般学校都有校园网&#xff08;尤其是大学&#xff09;:就是认证类的WiFi&#xff0c;没有密码就可以连接的那种&#xff0c;但是连上不能上网&#xff0c;需要账号密码认证。 一般都几个不同的校园网&#xff0c;这些校园网的来源一般都是学校安装的&#xff0c;或者校园网运…

WLAN认证技术

WLAN安全的发展历程 WLAN认证方式 开放系统认证 开放系统认证 Open system authentication 是缺省使用的认证机制&#xff0c;是最简单的认证算法&#xff0c;即不认证。 认证过程&#xff1a; 客户端发送一个认证请求给选定的AP 该AP发送一个认证成功响应报文给客户端确认该认…

校园网免认证登录连接

嫌校园卡套餐贵&#xff0c;就用GaoYun云&#xff0c;不需要认证登陆也可以使用校园网先用流量安装路线&#xff0c;连上校园网之后不要认证&#xff0c;连接软件。成功的话就是可以破解校园网。蓝奏云:https://wwa.lanzouy.com/iJvbP01erpng

wifi网络接入原理(中)——认证Authentication

转载请注明出处&#xff1a;http://blog.csdn.net/Righthek 谢谢&#xff01; 还是用手机来举例&#xff0c;扫描完成后&#xff0c;我们会选择想要加入的WIFI热点。此时&#xff0c;大部分都会弹出一个输入密码的窗口&#xff0c;当然也有不用输入密码的。这个过程叫做…

无线网络 EAP 认证

本文作者 98&#xff0c;擅长无线安全&#xff0c;过往文章&#xff1a;《wifi渗透-狸猫换太子》、《无线渗透--‘钓鱼’wifi》&#xff0c;完成 3 篇文章&#xff0c;欢迎加入我们的作者大军&#xff0c;争取为大家带来更多更好的关于无线攻防的文章。最后欢迎不同研究安全不同…

如何配置无线WiFi短信认证登录?

公共场所提供wifi上网服务&#xff0c;需要对用户进行实名认证&#xff0c;那如何配置无线WiFi短信认证登录&#xff1f; 本文将详细介绍无线wifi短信认证登录的流程及方法。 一、 短信验证码连接WiFi的功能怎么使用 要实现访客无线上网短信认证功能&#xff0c;需要借助上网…