scanf函数详解

article/2025/8/26 12:01:35

C库包含多个输入输出函数,scanf是其中一个比较常用的,因为scanf可以读取不同格式的数据。输入函数除了scanf之外还有fgets、getcahr。

printf()函数与scanf()函数是C语言中较为常用的输入输出函数,因为这两个函数的参数是不确定的,编译器也没有办法进行检查,因此用的时候挺容易报错,下面就总结一下scanf()函数的用法

参数(输入):

scanf()函数的参数分为两部分,一部分为转换字符,另一部分为待传入变量的地址,除数组外其他的都需要加地址符&。举例:

#include<stdio.h>
int main(void)
{	int n;char arr[40];scanf("%d%s",&n,arr);return 0;
}

注意:

因为字符串是char类型的数组,所以不用加取地址符。

不用加取地址符的原因是数组名就是数组中第一个元素的地址,而其他的变量名并没有这种作用,所以需要加取地址符。

scanf的转换字符

scanf的转换字符与printf函数的转换字符相同,只不过printf把数据转换成相应格式输出,而scanf把输入的数据转换成相应的格式

详细的转换字符表见printf()转换字符总结

scanf的*修饰符

scanf中的*修饰符和printf中的*修饰符不同,scanf中的*修饰符用在%和转换字符之间用于跳过该输入项,举个栗子:

scanf("%*d%*d%d",&n);

假如输入为1 2 3,则n的值为3,直接跳过了前两个输入。

scanf读取的过程

假设使用%d读取一个整数,scanf会从第一个非空字符开始读取(遇到空格会跳过),因为接收的类型为%d,所以scanf会读取数字,当读取的数符合要求时便会继续读取下一个字符,直至遇到非该类型字符,便结束本次读取,并将读取的数据传给变量。程序在下一次读取的时候会从上次结束位置的非数字字符开始读取,当遇到无法识别非数字字符时,scanf便停止读取并将下一个变量赋值为0;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GRDM1O9i-1661514046784)(C:/Users/24443/AppData/Roaming/Typora/typora-user-images/image-20220826182443761.png)]

举个栗子:

#include<stdio.h>
int main(void)
{int a,b;scanf("%d%d",&a,&b);printf("a=%d,b=%d",a,b);return 0;
}
// 跳过空字符后开始读取,遇到非数值型后结束第一个字符的读取存入a,第%d从字符n开始读取,但是读取不了,所以b=0
输入:1n1
输出:
a=1,b=0 // 遇到1后开始读取,遇到空格结束读取存入a,第二个%d从空格开始读取,跳过空格后读取2存入b
输入:
1 2
输出
a=1,b=2 

使用字段宽度,scanf会在字符结束或者遇到第一个空白字符结束读取(满足其中一个条件即可)

举个栗子:

#include<stdio.h>
int main(void)
{int a,b;scanf("%2d%d",&a,&b);printf("a=%d,b=%d",a,b);return 0;
}
输入
123 4输出
a=12,b=3

思考一下,如果按照scanf函数的规则如果程序是下面这样,输出会是什么?

#include<stdio.h>
int main(void)
{int a,b,c;scanf("%2d%d%d",&a,&b,&c);printf("a=%d,b=%d,c=%d",a,b,c);return 0;
}
输入123 4答案
输出a=12,b=3,c=4
格式字符串中的普通字符串

scanf函数允许将普通字符添加在格式字符串中,比如在转换说明中添加一个逗号

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

scanf函数的解释为:用户输入一个整数型再输入一个逗号再输入一个整数型。

所以输入可以这样写:

1,2
或
1,
2

但是不可以这样写:

1 , 2

而程序修改成

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

则可以接收如上输入,原因是格式字符串中的空白意味着跳过下一个输入项之前的所有空白字符

除了%c,其他转换说明都会自动跳过前面的空白字符,如果把空格放到%c前,scanf在读取的时候会自动跳过前面的空格字符,从第一个非空字符开始读取

scanf("%c",&c);//从第一个字符开始读取
scanf(" %c",&c);//从第一个非空字符开始读取
返回值(输出):

scanf函数返回成功读取的项数

举个栗子:

#include<stdio.h>
int main(void)
{int num,rv;rv=scanf("%d",&num);printf("rv=%d\n",rv)return 0;
}
输入一个int类型的数
输出1,表示scanf接收到了一个参数

写了这么多,但是理解的还不是特别透彻,但也有收获,等以后再慢慢补充。


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

相关文章

格式输入函数scanf

格式输入函数 1.scanf函数的一般格式 Scanf函数是一个标准库函数&#xff0c;其函数原型在头文件stdio.h中&#xff0c;scanf函数的一般形式如下 Scanf(格式控制&#xff0c;地址表列)&#xff1b; 其中&#xff0c;格式控制的作用与printf函数相同&#xff0c;但不能显示非…

scanf详解

在C语言中scanf作为重要的输入操作函数&#xff0c;对于熟悉C语言有重要意义。 1.头文件 scanf和printf函数一样&#xff0c;都被声明在头文件stdio.h里&#xff0c;因此在使用scanf函数时要加上#include <stdio.h>。它是格式输入函数&#xff0c;即按用户指定的格式从键…

scanf()函数用法小结

scanf()函数是格式化输入函数&#xff0c;它从标准输入设备(键盘) 读取输入的信息。 其调用格式为: scanf("<格式化字符串>"&#xff0c;<地址表>); 格式化字符串包括以下三类不同的字符&#xff1b; 1、 格式化说明符&#xff1a; 格式化说明符…

scanf用法简介

scanf是一个变参函数&#xff0c;参数的数量和类型是不确定的 scanf()是C语言中的一个输入函数。与printf函数一样&#xff0c;都被声明在头文件stdio.h里&#xff0c;因此在使用scanf函数时要加上#include <stdio.h>。 功能&#xff1a; 函数 scanf() 是从标准输入流s…

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发送一个认证成功响应报文给客户端确认该认…