#t221. 逗号分隔符
逗号分隔符
逗号分隔符
题目背景
Special for beginners, ^_^
题目描述
输入 个 类型的数据,请输出最后一个。
输入格式
三个 类型的小数,中间用逗号隔开。
输出格式
输出第三个数,保留小数点后 位。
样例输入
1.1231414122,3.2333222222232333,533.1111199999999999922222222223333
样例输出
533.11112000
数据范围
1s, 1024KiB for each test case.
提示
一、scanf 的格式串是「输入模板」
scanf 不只是「读数字」,它是拿格式串去逐字符匹配输入:
- 格式串里的
%lf、%d是「这里是数据,读走」; - 格式串里的普通字符(逗号、减号、冒号、空格),要求输入里原样出现,匹配上了才跳过。
double a, b;
scanf("%lf,%lf", &a, &b); // 输入必须是 3.5,4.2 这种带逗号的形式
如果输入是 3.5,4.2,格式串里的逗号正好对上,两个数都读进来。
如果格式串写成 "%lf%lf"(没有逗号),读完 3.5 之后,scanf 期望下一个是数字,但输入里是逗号,匹配失败,第二个变量保持原样(垃圾值)。
二、两种解法,选一种就好
- 格式串里如实写出分隔符:输入用逗号隔开,就写
"%lf,%lf"。 - 用一个 char 把分隔符读掉:
scanf("%lf", &a); scanf("%c", &sep); scanf("%lf", &b);,中间的,被sep吃掉。
三、%c 的特殊脾气
%c 不会跳过空格和换行(%d、%lf 会自动跳过)。如果输入里有换行,%c 可能读到一个换行符而不是你想要的字符。本题数据是紧凑的,暂时不用管,但要知道这个特性。
四、自检方法
读完后立刻把三个变量打印出来看一眼(printf("%.2f %.2f %.2f\n", a, b, c);)。如果某个数是 0 或者一个奇怪的巨大值,多半是格式串没匹配上。
- 先看清楚三个数之间隔的是什么符号,再决定格式串里该怎么写。
- 只用
%lf%lf%lf会怎样?想一想:读完第一个数后,下一个字符是逗号,%lf能读它吗? - 两种思路选一种:格式串里如实写出分隔符,或用
%c把分隔符读掉。
自查:只输出第三个数,保留 8 位小数;如果读到 0 或读失败,多半是分隔符没处理。