一、输入格式配对错误
①案例一:
改正:将%f改为%lf;如果是float定义的变量,则可用%f;
Add:f与e作用相同且可以互相替换,如%f、%e、%le;
%g------用于输出实数,根据数值大小自动选择f或者e格式;
利用c语言对于printf中格式符号“F”和“f”、“L”和“l”等是不分大小写的特点,利用这个可以有效防如“1”与“l”的混淆;
②案例二:
此时:
输入:123456789 得到:a=12 b=6789 c=
解释:”*“号代表输入项仅仅读入数据不赋给相应的变量 而最后c存入的是换行符,它是不可显示的字符;
若将scanf中改为%2d%*3c%1d%c
则输出: a=12 b=6 c=7,这里不再做出更为详细的解释;
输入:123 456 789
输出:a=12 b=456 c=
解释:很明显它将12赋给了a,然后3被丢弃,再往后遇到空格,编译系统则会认为这个字符串已经结束,然后又将456赋给了b,但同理6后面有空格便阻断了789的输入;
二、scanf与回车键
此时,若输入:12 34 56回车abc
则输出:12,34,56回车,a,b
若输入:12 34 56abc
则输出:12 ,34,56a,b,c
解释:第一行输入时将12 34 56分别赋值给abc;回车被作为字符赋给变量c1,后面字符ab分别给了c2和c3;
解决方法:
①将第二行的scanf中的第一个%c之前加一个空格;
②在两组输入之间加一个fflush(stdin);清空缓冲区;
同理接下来这个程序
我们便可以发现当输入Y时,它会出现这样的情况
这就是因为第二次直接把回车赋给c;
解决方案:
①在%c前面加入空格;
②使用fflush(stdin);