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

article/2025/8/26 11:39:24

一、概述

scanf 函数和 printf函数 一样,用途广泛,其功能用一句话概括就是 “ 通过键盘给程序中的变量赋值 ” 。

二、用法(格式)

scanf 函数的两种用法,或者说两种格式如下:

1、 scanf( " 输入控制符 " ,输入参数);      /* -----  英文输入法输入  -----*/    简单、常用用法      

例如:scanf("%d", &i);                       /* &i 表示变量 i 的地址,&是取地址符 */                                 

功能:将从键盘输入的字符转化为“ 输入控制符 ” 所规定格式的数据,然后存入以输入参数的值为地址的变量中。

“ 输入控制符 ” 和 “ 输出控制符 ” 是一模一样的。例如:一个整型数据,通过 printf 输出用 %d 输出,通过 scanf 输入时同样是用 %d 输入。

&是一个取地址运算符,&后面加变量名表示“该变量的地址”,所以&i就表示变量 i 的地址。&i又称为“ 取地址i ”,就相当于将数据存入以变量 i 的地址为地址的变量中,也就是将数据存入变量i中。

 综上所述:假如从键盘上输入字符 123,然后  %d 将这三个字符转化成十进制数 123,通过 “ 取地址 i ” 找到变量 i 的地址,再将数字 123 放到以变量 i 的地址为地址的变量中,即将数字 123 放到变量 i 中,所以最终的输出结果就是 i=123

或例如:scanf("%d%d", &i, &j);        /*一次给多个变量赋值*/

注意:       

        1)、键盘输入数据给多个变量赋值时,赋的值之间一定要用空格、回车或者 Tab 键隔开,用以区分是给不同变量赋的值。其中空格、回车或 Tab 键的数量不限,只要有就行。一般都使用一个空格。

         2)、scanf函数双引号内的多个 “ 输入控制符 ” 之间,千万不要加逗号。原因其一是:键盘输入时,逗号的数目容易出错;原因其二是:键盘输入时,中/英输入法容易混淆,会极大可能增加代码的出错率。

2、scanf( " 输入控制符非输入控制符 " , 输入参数);    /* -----  英文输入法输入  -----*/   不建议使用 

例如:scanf("i = %d", &i);         /* &i 表示变量 i 的地址,&是取地址符 */

“ 非输入控制符 ” 就是除了“ 输入控制符 ” 的其他符号,例如: i= 

综上所述:所有的 “ 非输入控制符 ” 在键盘上输入时都要原样输入,即键盘输入的时候 i= 必须要原样输入。例如:如果需要键盘输入给变量 i 赋值 123,那么必须在键盘上输入i=123才正确,否则就是错误。

不建议使用原因:scanf函数中的“ 非输入控制符 ” 在键盘输入过程中,既累赘又麻烦,没必要多此一举。 

所以在使用scanf函数时,务必记住 < 双引号内永远都不要加 “ 非输入控制符 ” >,只用 “ 输入控制符 ” ,即采纳用法(格式)1。

三、小结

1、scanf 的使用看似细节繁杂,但使用起来非常简单。就目前而言,只要掌握以下五点:

    1)、在 scanf 的“输入参数”中,变量前面的取地址符&不要忘记。       

    2)、scanf 函数 双引号内,除了“ 输入控制符 ”外什么都不要写,尤其是不要用 \n 。         

    3)、“ 输出控制符 ” 和 “ 输出参数 ” 无论在 “ 顺序上 ” 还是在 “ 个数上 ” 一定要一一对应。 

    4)、“ 输入控制符 ” 的类型和变量所定义的类型一定要一致。对于从键盘输入的数据的类型,数据是用户输入的,程序员是无法决定的,所以在写程序时要考虑容错处理。       

    5)、使用 scanf 函数之前先用 printf 函数提示输入。

2、关于缓冲区的理解: 

        在 scanf 函数中,从键盘输入的一切数据,不管是数字、字母,还是空格、回车、Tab 等字符,都会被当作数据存入缓冲区。存储的顺序是先输入的排前面,后输入的依次往后排。按下回车键的时候 scanf 开始进入缓冲区取数据,从前往后依次取。   

        如果 scanf 函数中仅有 %d ,则 scanf 函数只识别“十进制整数”。对 %d 而言,空格、回车、Tab 键都是区分数据与数据的分隔符。当 scanf 函数进入缓冲区中取数据的时候,如果 %d 遇到空格、回车、Tab 键,那么它并不取用,而是跳过继续往后取后面的数据,直到取到“十进制整数”为止。对于被跳过和取出的数据,系统会将它从缓冲区中释放掉。未被跳过或取出的数据,系统会将它一直放在缓冲区中,直到下一个 scanf 来获取。但是如果 %d 遇到字母,那么它不会跳过也不会取用,而是直接从缓冲区跳出。   

        如果将 %d 换成 %c,那么任何数据都会被当作一个字符,不管是数字还是空格、回车、Tab 键它都会取回。

四、实践问题总结 

1、判断“等不等于”是“==”,赋值是“=”。   

2、采用用法(格式)1的代码,其中 scanf 函数的“ 输入控制符 ”(%d)加没加空格隔开,当键盘输入字符时,都必须用空格、回车或者 Tab 键隔开。 

3、采用用法(格式)2的代码,其中 scanf 函数的“ 非输入控制符 ”(a/b/c)前面必须加一个空格隔开,否则会出现刷屏结果。而当键盘输入字符时,都可以或不用空格、回车或者 Tab 键隔开。


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

相关文章

关于c语言的scanf用来读取字符的一些总结

关于c语言的scanf用来读取字符的一些总结 scanf() 是带有缓冲区的。遇到 scanf() 函数&#xff0c;程序会先检查缓冲区中是否已经有数据 如果没有&#xff0c;就等待用户输入。用户从键盘输入的每个字符都会暂时保存到缓冲区&#xff0c;直到按下回车键&#xff0c;输入结束&…

scanf函数详解

C库包含多个输入输出函数&#xff0c;scanf是其中一个比较常用的&#xff0c;因为scanf可以读取不同格式的数据。输入函数除了scanf之外还有fgets、getcahr。 printf()函数与scanf()函数是C语言中较为常用的输入输出函数&#xff0c;因为这两个函数的参数是不确定的&#xff0…

格式输入函数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等信息干扰导致信号…