首页 > 其他分享 >小白scanf------新手必备

小白scanf------新手必备

时间:2024-01-20 17:32:31浏览次数:31  
标签:字符 int scanf 占位 printf ------ 新手 main

兄弟们说实话,我感觉我今天特别的兴奋,刚刚发完一篇我就又发了一另一篇文章,

(〜)〜(〜)〜(〜)〜

像我这么难得的新人作者,来点赞来点关注,感谢各位帅哥美女。


我们刚刚介绍了printf相关的一些知识。当然对于c语言关键的输入和输出,我们刚刚说了输出。接下来介绍的就是c语言中常见的输入函数scanf相关的知识。


一,scanf

当我们有了变量,我们需要给变量输⼊值就可以使⽤ scanf 函数,如果需要将变量的值输出在屏幕上

的时候可以使⽤ prinf 函数,下⾯看⼀个例⼦:

int main()
{
	int a = 0;
	printf("输入一个整数");
	scanf("%d", &a);

	printf("%d", a);
	return 0;

}

小白scanf------新手必备_scanf知识

注意:标准输⼊⼀般指的就是键盘,标准输出⼀般指的就是屏幕

1.1,scanf使用方法

scanf() 函数⽤于读取⽤⼾的键盘输⼊。 程序运⾏到这个语句时,会停下来,等待⽤⼾从键盘输⼊。

⽤⼾输⼊数据、按下回⻋键后, scanf() 就将其存⼊变量。 scanf() 的语法跟 printf() 类似。

同时scanf它的第⼀个参数是整数,⾥⾯会放置占位符(与 printf() 的占位符基本⼀致)

告诉编 译器如何解读⽤⼾的输⼊,需要提取的数据是什么类型。这是因为 C 语⾔的数据都是有类型的, scanf() 必须提前知道⽤⼾输⼊的数据类型,才能处理数据,它的其余参数就是存放⽤⼾输⼊的变量,格式字符串⾥⾯小白scanf------新手必备_字符串_02

例如:一个简单的加法

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a, b = 0;
	printf("输入两个整数");
	scanf("%d %d", &a, &b);

	printf("%d+%d=%d\n", a, b, a + b);


	return 0;
}

小白scanf------新手必备_数据_03

在上面我们使用了一个取地址符号,如果是直接看这篇文章的人的,我在这里简单的说一下,scanf传递的不是值而是是地址,所以在这里我们使用有关地址的取地址符号。

#define _CRT_SECURE_NO_WARNINGS 1是VS关于scanf不安全所以使用了这个来表明我就使用

这个scanf

怎么一直出现#define _CRT_SECURE_NO_WARNINGS 1

哔哩哔哩上面:【C语言学习问题】VS2013编译器对函数不安全报错的解决办法】(点一下会跳到哔哩哔哩或者直接搜一下)可以解决


1.2scanf特点

scanf() 处理数值占位符时,会⾃动过滤空⽩字符,包括空格、制表符、换⾏符等。

所以,⽤⼾输⼊的数据之间,有⼀个或多个空格不影响 scanf() 解读数据。另外,⽤⼾使⽤回⻋

键,将输⼊分成⼏⾏,也不影响解读

例如

int main()
{
	int a, b = 0;
	printf("输入两个整数");
	scanf("%d               %d", &a, &b);

	printf("%d+%d=%d\n", a, b, a + b);


	return 0;
}

小白scanf------新手必备_scanf知识_04

我们来看下面的例子:

int main()
{
	int a;
	float b;
  //我们输入-13.45e1#10
	scanf("%d %f", &a, &b);
	printf("%d %f", a, b);

	return 0;
}

小白scanf------新手必备_字符串_05

scanf() 读取⽤⼾输⼊时, %d 占位符会忽略起⾸的空格,从 - 处开始获取数据,读

取到 -13 停下来,因为后⾯的 . 不属于整数的有效字符。这就是说,占位符 %d 会读到 -13 ,然后后面的45算浮点数了

1.3scanf的返回值

你去使用函数的时候函数必然是会有返回值的,scanf() 的返回值是⼀个整数,表⽰成功读取的变量个数。 如果没有读取任何项,或者匹配失败,则返回 0 。如果在成功读取任何数据之前,发⽣了读取错误或 者遇到读取到⽂件结尾,则返回常量 EOF即

例如

int main()
{
	int a = 0;
	int b = 0;
	int c = 0;

	int num =scanf("%d %d %d", &a, &b, &c);

	printf("%d %d %d\n", a, b, c);

	printf("%d", num);
	return 0;
}

小白scanf------新手必备_占位符_06

实现ctry+z按三下VS会停止:

当我们在上面输入两个数的时候,按三下ctry加z。Vs停止工作,那么scanf在运行的过程中就只读了两个数,所以我们的num返回为2,

他在读取第3个数的时候我们停止了。他读取失败,所以我们的字母c值为0

如果我们不输入值直接停止

小白scanf------新手必备_占位符_07


如果⼀个数字都不输⼊,直接按3次 ctrl+z ,输出的r是-1,也就是EOF;

1.4scanf() 常⽤的占位符

%c :字符。


%f : float 类型浮点数。

%lf : double 类型浮点数。

%Lf : long double 类型浮点数。

%s :字符串。

%[] :在⽅括号中指定⼀组匹配的字符(⽐如 %[0-9] ),遇到不在集合之中的字符,匹配将会

停⽌。

上⾯所有占位符之中,除了 %c 以外,都会⾃动忽略起⾸的空⽩字符。 %c 不忽略空⽩字符,总是返

回当前第⼀个字符,⽆论该字符是否为空格。

如果要强制跳过字符前的空⽩字符,可以写成 scanf(" %c", &) ,即 %c 前加上⼀个空格,表

⽰跳过零个或多个空⽩字符。

下⾯要特别说⼀下占位符 %s ,它其实不能简单地等同于字符串。它的规则是,从当前第⼀个⾮空⽩

字符开始读起,直到遇到空⽩字符(即空格、换⾏符、制表符等)为⽌








因为 %s 不会包含空⽩字符,所以⽆法⽤来读取多个单词,除⾮多个 %s ⼀起使⽤。这也意味着,

scanf() 不适合读取可能包含空格的字符串,⽐如书名或歌曲名。另外, scanf() 遇到 %s 占位

符,会在字符串变量末尾存储⼀个空字符 \0 。


scanf() 将字符串读⼊字符数组时,不会检测字符串是否超过了数组⻓度。所以,储存字符串时,

很可能会超过数组的边界,导致预想不到的结果。为了防⽌这种情况,使⽤ %s 占位符时,应该指定

读⼊字符串的最⻓⻓度,即写成 %[m]s ,其中的 [m] 是⼀个整数,表⽰读取字符串的最⼤⻓度,后

⾯的字符将被丢弃。

1.4.1例如%c的实例

int main()
{
	char a = 0;
	scanf("%c", &a);
	printf("%cxxxx", a);

	return 0;

}

小白scanf------新手必备_数据_08


1.4.2例如%s的实例

int main()
{
	char a[20] = {0};
	scanf("%s", &a);
	printf("%s", a);

	return 0;

}

小白scanf------新手必备_字符串_09

1.4.3指定读⼊字符串的最⻓⻓度

int main()
{
	char a[20] = {0};
	scanf("%5s", &a);
	printf("%5s", a);

	return 0;

}

小白scanf------新手必备_数据_10

1.5赋值忽略符

有时,⽤⼾的输⼊可能不符合预定的格式。

int main()
{
	int year = 0;
	int month = 0;
	int day = 0;

	scanf("%d-%d-%d", &year, &month, &day);
	printf("%d %d %d\n", year, month, day);
	return 0;
}

小白scanf------新手必备_字符串_11

错误的格式:

小白scanf------新手必备_占位符_12

小白scanf------新手必备_占位符_13

为了避免这种情况, scanf() 提供了⼀个赋值忽略符(assignment suppression character) * 。

只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃。

int main()
{
	int year = 0;
	int month = 0;
	int day = 0;

	scanf("%d%*c%d%*c%d", &year, &month, &day);
	printf("%d %d %d\n", year, month, day);
	return 0;
}

小白scanf------新手必备_数据_14

我们在上面的代码中,两个%d中间加了一个%c,并且在c的前面加了一个*表明这两个%c我们不需要返回值,这样我们输入其他格式时都可以算对了。


小白scanf------新手必备_scanf知识_15

最后谢谢各位老板

小白scanf------新手必备_scanf知识_16

标签:字符,int,scanf,占位,printf,------,新手,main
From: https://blog.51cto.com/u_16237653/9345940

相关文章

  • 【数据结构】详谈队列的顺序存储及C语言实现
    循环队列及其基本操作的C语言实现前言大家好,很高兴又和大家见面啦!!!在上一篇内容中,我们在介绍完队列的基本概念、重要术语以及基本操作后,又回顾了一下数据结构的三要素——数据的逻辑结构、数据的存储结构以及数据的运算。队列这种数据结构我们已经介绍了它的逻辑结构以及数据运算......
  • 数据库的内连接和外连接
    数据库的内连接和外连接内连接:两个或两个以上的表进行关联查询时,查询的结果集中返回所有满足连接条件的行。外连接:两个或两个以上的表进行关联查询时,查询的结果集中除了返回满足连接条件的行以外,还返回左(或右)表中不满足条件的行,这种连接称为左(或右)外连接。如果是左外连接,则连......
  • 动态代理IP如何选择?
    IP地址是由IP协议所提供的一种统一的地址格式,通过为每一个网络和每一台主机分配逻辑地址的方式来屏蔽物理地址的差异。根据IP地址的分配方式,IP可以分为动态IP与静态IP两种。对于大部分用户而言,日常使用的IP地址均为动态IP地址。从代理IP的角度而言,大多数用户的需求也主要是动态代理......
  • 可扩展、CY8C4148AZAS595、CY8C4148AZAS568、CY8C4148AZAS558支持更低的成本HMI应用,BT
    一、PSoC™Automotive4100SMaxMCU 1、说明PSoC4100SMax采用CAPSENSE技术,拥有7x7mm²、10x10mm²和14x14mm²三种封装尺寸,支持工业控制、汽车人机交互(HMI)、智能家居自动化及大型家用电器,如机器人、电感式传感器、洗衣机、冰箱、空调、智能温控器、打印机等。P......
  • MySQL三大范式
    MySQL三大范式数据库设计的三范式(NormalForm)是一组关于关系数据库设计的规范,目的是为了减少冗余数据、提高数据存储的效率,并确保数据的一致性。三范式分为以下三个层次:第一范式(1NF):表中每列的属性不可再分数据表中的每一列都是不可再分的基本数据项,而且在每个记录中的每一列都......
  • Ubuntu20.04部署docker环境
    1.卸载旧的docker版本forpkgindocker.iodocker-docdocker-composepodman-dockercontainerdrunc;doapt-getremove$pkg;done2.切换国内的软件源cat>/etc/apt/sources.list<<EOFdebhttps://mirrors.aliyun.com/ubuntu/focalmainrestricteduniversemultiv......
  • 桥接模式
    定义:将抽象部分与它的具体实现部分分离,使它们都可以独立的变化,通过组合的方式建立两个类之间的联系,而不是继承类型:结构型适用场景:抽象和具体实现之间增加更多的灵活性一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展不希望使用继承,或......
  • 【MySQL 8+】CRUD等操作修改数据库的表后,数据库中表相关信息与数据库工具所展示的信息
    相关转载:①mysql8.0数据库中表的行数不显示,大小也不显示_-CSDN问答②MySQL8.0存储表的行数和修改日期不自动更新的问题_mysql表插入数据,但是修改日期无值-CSDN博客=============================================================个人总结:本人一开始上手的就是MySQL8+的版......
  • 常用 $ \LaTeX $ 数学公式(持续更新)
    Updateon2022.11.12:修正了一处小错误希望这份东西能尽量帮助大家,节省在\(\LaTeX\)公式大全中寻找的时间,欢迎在评论区提出建议。如果您有需求,例如添加某一部分的公式,可私信号主。插入公式$你要插入的公式$这是普通插入(即紧跟随文字插入)$$你要插入的公式(最好是比较大的)$$......
  • 学习笔记——KMP模式匹配
    KMP模式匹配KMP算法能够在线性时间内判定字符串\(A\left[1\simN\right]\)是否是字符串\(B\left[1\simM\right]\)的字串,并求出字符串\(A\)在字符串\(B\)中各次出现的位置。详细来讲,KMP算法分为两步。对字符串\(A\)进行自我匹配求出一个数组\(next\),\(next\lef......