问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

有关scanf的一个问题

发布网友 发布时间:2024-09-26 22:05

我来回答

4个回答

热心网友 时间:2024-11-26 20:44

scanf()函数根据由【format(格式)】指定的格式从stdin(标准输入)读取,并保存数据到【其它参数】.
【format(格式)字符串】由
【控制字符(控制字符以一个%符号开始,如%d,%c)】和
【空白字符(如空格,tab)】和
【非空白字符】组成.

scanf()读取匹配【format(格式)字符串】的输入.
当读取到一个【控制字符】, 它把值放置到【下一个变量】. 特别的,"*"加在任何项的前面表示该项不赋值,如%*c不会赋值任何变量
【空白字符】会【跳过】.
【非空白字符】和【输入匹配, 然后丢弃】.

scanf()的返回值是成功赋值的变量数量, 发生错误时返回EOF.

--------------------------------------------------------------------------------

语句:scanf("%d%*c%d %*c%d",&date,&month,&year);

现在 scanf的format(格式)字符串为:"%d%*c%d %*c%d" 。

第一个%d为【控制字符】,【匹配一个数字】(即数字0-9的组合)。匹配结果【赋值给变量 date】

第一个%*c为【控制字符】,匹配【任意一个字符】,但是【不赋值给任何变量】!!!。
这里的任意字符本来也【包括数字字符 0-9】,但是因为 %c 前面有%d,
即使有数字字符,已经被 %d 给匹配掉了。
所以这里的 %*c 实际是匹配一个【除了数字字符 0-9 以外】的任意字符。

第一个%d为【控制字符】,【匹配一个数字】(即数字0-9的组合)。匹配结果【赋值给变量 month】

第一个【空白字符】(空格)被忽略,【不匹配任何字符】

第二个%*c为【控制字符】,匹配【任意一个字符】。
【注意】:第二个 %*c 和 第一个%*c为【不同】!
因为第一个 %*c 前面是 %d ,因此%*c 实际是匹配一个【除了数字字符 0-9 以外】的任意字符。
因为第二个 %*c 前面是【空白字符】 ,因此%*c 实际是匹配任意字符,【包括数字字符 0-9 】。

第二个%d为【控制字符】,【匹配一个数字】(即数字0-9的组合)。匹配结果【赋值给变量 year】

--------------------------------------------------------------------------------

原始:scanf("%d%*c%d %*c%d",&date,&month,&year);
输入:"23 2 2001"

输入【23】 匹配 :【格式第一个%d】 ,date = 23

输入【空格】被匹配:【格式第一个%*c】 ,匹配结果不存入任何变量。

输入【2】匹配:【格式第二个%d】 , month=2

输入【空格】被舍弃。【格式第一个空格】跳过

输入【2001的首位数字“2”】匹配:【格式第二个%*c】 ,匹配结果不存入任何变量

输入【2001的除首位数字“2”部分 001】匹配:【格式第二个%d】,year = 001 = 1

--------------------------------------------------------------------------------

去掉空格:scanf("%d%*c%d%*c%d",&date,&month,&year);
输入:"23 2 2001"

输入【23】 匹配 :【格式第一个%d】 ,date = 23

输入【空格】被匹配:【格式第一个%*c】 ,匹配结果不存入任何变量。

输入【2】匹配:【格式第二个%d】 , month=2

输入【空格】被匹配:【格式第二个%*c】 ,匹配结果不存入任何变量。

输入【2001】匹配:【格式第二个%d】,year = 2001

--------------------------------------------------------------------------------

空格弄在%*c后面:scanf("%d%*c%d%*c %d",&date,&month,&year);
输入:23 2 2001

输入【23】 匹配 :【格式第一个%d】 ,date = 23

输入【空格】被匹配:【格式第一个%*c】 ,匹配结果不存入任何变量。

输入【2】匹配:【格式第二个%d】 , month=2

输入【空格】被匹配:【格式第二个%*c】 ,匹配结果不存入任何变量。

【格式第一个空格】跳过,不匹配任何输入

输入【2001】匹配:【格式第二个%d】,year = 2001

热心网友 时间:2024-11-26 20:45

这好像跟你的输入有关,在 scanf("%d%*c%d %*c%d",&date,&month,&year);这一语句之后,输入23 2 2001 ,则23取入第一个%d ,被输入的第一个空格取入,2取入第二个%d,输入的第二个空格与输入语句中的空格对应,然后2可能就被取入第三个%*c,最后001取入第三个%d,所以输出是year=1。

热心网友 时间:2024-11-26 20:45

1、%*C表示读指定的数据但不保存。
2、最后一个占位符前面的空格占位符可以忽略掉。

热心网友 时间:2024-11-26 20:46

注意 %*c的作用是忽略一个字符
你输入23 2 2001 会产生23 2 1的原因是这样的:
%d读了23
然后%c忽略了空格
然后%d读了2
注意 此时你scanf里有空格 所以2后的空格被空格代替
接着%c忽略了2
%d 读了001 也就是1
所以结果是 23 2 1

如果把空格放后面同理分析
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何查被录取到的专业 怎样查被录取的专业 录取后怎样查询录取的专业 录取专业怎么查 已被录取怎么查专业 ghs网络语什么意思_ghs网络语意思出处含义介绍 纸箱企业管理软件 ghs什么意思网络(ghs什么意思网络用语) 《喜羊羊与灰太狼》大结局 0与任何数相加都得原数吗? c语言程序 输入两个字符串 要求连续输出 必须用函数解决 帮忙看下我的... 在指定字符后面加入字符,为啥第一个可以,第二个不可以,他俩只是在主... 老公说我经常打骂他,性格不合无法继续生活下去,这是离婚的借口吗 我老公也经常打骂我,越想越心寒,对我父母也不好? 梦见经过宿舍楼的预兆 ...素描怎么用ps将照片或图片变成线稿的简易素描图 做完人流手术需要注意什么 做人流手术后注意什么 刚做完人流要注意哪些 QQ里的网络硬盘怎么用啊? 安卓系统的手机QQ怎么打开网络硬盘啊 月饼为什么会裂,原因竟是这两个 求专业的提神抗疲劳饮料,最近加班多特别累~ 被女生骗了339元钱多不多?还是怪自己请她吃饭,不约她就不会心疼这... 吉林考生女生339报市场营销或者电子商务第二批能录取上吗 女生说3397是什么意思? 女生339什么意思? 什么是女生339? 梦见自己上面的门牙掉了一颗,是什么意思?现实生活中牙齿有点松。_百度... 盐酸半胱氨酸甲酯盐酸半胱氨酸甲酯 行权价的确定一般包括()。 2024年股票期权行权价格的含义是什么? 股权激励方案必须经过股东会决议吗? 电饭锅之★第一个彩虹蛋糕怎么做 一块砖厚七厘米十块砖厚多少分米100块砖厚多少米怎样列算式二年级? 一个一块砖长十厘米宽七厘米高五分米它的体积是多少立方厘米 一个蓄水池长七米宽40分米深300厘米如果给这个蓄水池铺瓷砖一共要贴多 ... 江华毛尖的功效与作用 江华毛尖的冲泡方法与制作方法 沟一双小鱼鞋14码的需要几两毛线 三年级写猫的作文300字 为什么QQ影音老是被360杀掉?我下载了一个QQ影音播放器,用着还可以,挺... 如何防止360自动 下载更新软件 把鸡汁锅贴做得好吃的秘诀有哪些? 重庆鸡汁锅贴如何烹饪口感极为丰富? 重庆鸡汁锅贴如何烹饪口感绝佳? 烹饪重庆鸡汁锅贴有哪些小窍门? 制作鸡汁锅贴好吃的秘诀有哪些? 制作重庆鸡汁锅贴时需要掌握什么窍门? 制作鸡汁锅贴需要提前做哪些准备? 制作重庆鸡汁锅贴有哪些小窍门?