首页 > 其他分享 >c语言值得注意的知识

c语言值得注意的知识

时间:2023-05-31 18:34:40浏览次数:37  
标签:字符 语言 值得注意 scanf 知识 空格 56.78 浮点数 读取

1.说明下列每对scanf格式串是否等价?如果不等价,请指出它们的差异。

(c) "%f"与"%f  "。

在 `scanf` 函数中,`"%f"` 和 `"%f "` 这两种格式的区别在于后面的空格。

1. `scanf("%f", &variable);` 这种情况下,`scanf` 会读取并解析用户输入的浮点数,然后将解析的值存入 `variable` 中。一旦读取到非数字字符(例如空格,换行,制表符等),`scanf` 就会停止读取。

2. `scanf("%f ", &variable);` 这种情况下,`scanf` 在解析并存储浮点数之后,还会继续读取并忽略掉后面的任何空白字符(包括空格,换行和制表符)。也就是说,`scanf` 将会读取直到下一个非空白字符为止。

简单地说,`"%f"` 读取一个浮点数,然后停在后面的第一个非数字字符上,而 `"%f "` 读取一个浮点数,并且会跳过其后的所有空白字符,直到遇到下一个非空白字符。

假设我们有下面这样的输入:`12.34 56.78`

如果你的代码如下:

float a, b;
scanf("%f", &a);
scanf("%f", &b);

 

`scanf("%f", &a);` 会读取 `12.34`,然后停止在空格处,因为空格是非数字字符。然后,`scanf("%f", &b);` 会从空格后的 `56.78` 开始读取,因此,`a` 将得到 `12.34`,`b` 将得到 `56.78`。

然而,如果你的代码是这样的:

float a, b;
scanf("%f ", &a);
scanf("%f", &b);

`scanf("%f ", &a);` 会读取 `12.34`,然后继续读取并忽略后面的空格,停在 `56.78` 的前面。然后,`scanf("%f", &b);` 将从 `56.78` 开始读取。所以,结果仍然是 `a` 得到 `12.34`,`b` 得到 `56.78`。

区别在于,如果你在 `"%f "` 后面还想继续读取空白字符或者做其他的 `scanf` 操作,可能就会出现预料之外的结果,因为 `"%f "` 会跳过浮点数后面的所有空白字符。

标签:字符,语言,值得注意,scanf,知识,空格,56.78,浮点数,读取
From: https://www.cnblogs.com/xuenima/p/17447013.html

相关文章

  • C++基础知识系列-4
    C++基础1C++的struct和class的区别区别1:默认继承的权限。不明确指定的情况下,来自class的继承按照private继承处理,来自struct继承按照public处理区别2:成员的默认访问权限。class成员默认是private权限,struct默认是public2C和C++区别struct上的区别:C中无Protection行为,不能定......
  • iOS中容易用错的常用知识点
    坐标系转换ios中的坐标系有三种视图坐标系:原点(0,0)视图的左上角窗口坐标系:原点(0,0)窗口的左上角世界坐标系:原点(0,0)游戏中世界的原点平时开发中经常会遇到转UIWindow坐标问题,如:已知一个UI控件的坐标,把它转换到UIWindow时,它对应的UIWindow坐标是什么?苹果提供了一套相关的......
  • c++面试 笔试基础知识学习记录
    1.int(*p)[4]和int*p[4]int(*p)[4],p是一个指针变量,指向一个存放4个int变量的一维数组,p+1是向后移动数组长度个字节大小,也就是向后移动4个int字节的大小。*(*(p+1)+2)=*(p[1]+2)int*p[4],等价于int*(p[4]),[]优先级高于*所以p首先是一个数组。即定义了一个指针数组,p就......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-2-playwright的API及其他知识
    1.简介上一篇宏哥已经将Python+Playwright的环境搭建好了,而且也简单的演示了一下三款浏览器的启动和关闭,是不是很简单啊。今天主要是把一篇的中的代码进行一次详细的注释,然后说一下playwright的API和其他相关知识点。那么首先将上一篇中的代码进行一下详细的解释。2.代码解释2.......
  • uniapp 常用知识点
    1、原生导航栏(顶部)动态修改titleuni.setNavigationBarTitle({title:"賬號名稱"})2、原生导航栏(顶部)左边箭头默认是返回上一级,监听动态返回指定页面与data()同级//监听原生导航栏的发回按钮onBackPress(options){if(options.from==='navigateBack'){r......
  • 【c&c++】erase怎么用c语言,C++ erase()函数使用时的注意点
    遇见的场景删除vector容器指定元素时;erase()函数的用法vector::erase():从指定容器删除指定位置的元素或某段范围内的元素。具体用法如下:iteratorerase(iterator_Where);删除指定位置的元素,返回值是一个迭代器,指向删除元素的下一个元素;iteratorerase(iterator_First,i......
  • R语言GARCH模型对股市sp500收益率bootstrap、滚动估计预测VaR、拟合诊断和蒙特卡罗模
    原文链接:http://tecdat.cn/?p=26271最近我们被客户要求撰写关于GARCH的研究报告,包括一些图形和统计输出。Box等人的开创性工作(1994)在自回归移动平均模型领域的相关工作为波动率建模领域的相关工作铺平了道路,分别由Engle(1982)和Bollerslev(1986)引入了ARCH和GARCH......
  • 关于c语言习题(529)
    1、从字符数组中读出相应的整数、实数。(写的有点可怕,先找第一个数字就会简单很多)//从一个字符数组中读出相应的整数、实数#include<stdio.h>#include<math.h>#include<string.h>intmain(){voidatoif(chara[]);chara[30];fgets(a,30,stdin);atoif(a......
  • go语言笔记——defer作用DB资源等free或实现调试
    defer和追踪关键字defer允许我们推迟到函数返回之前(或任意位置执行 return 语句之后)一刻才执行某个语句或函数(为什么要在返回之后才执行这些语句?因为 return 语句同样可以包含一些操作,而不是单纯地返回某个值)。关键字defer的用法类似于面向对象编程语言Java和C#的 fi......
  • Redis相关知识
    Redis默认16个数据库,0-15,初始默认使用0号库使用命令select<dbid>来切换数据库如select8同一密码管理,所有库同一个密码dbsize查看当前数据库的key的数量flushdb清空当前库flushall杀死全部库Redis是单线程+多路IO复用技术多路复用指的是使用一个线程来检查多个文件描述符(......