闲着无聊的时候有个小学生问了一个编程题,原题如下:
用scanf输入半径r和高h求圆锥的面积和体积输出结果保留两位小数。
本来以为是很简单的题的,结果做好后在小侄子的手残输入的参数下异常频繁啪啪打脸。。。(此次省略内心活动100字)下面贴上修改后的版本和原版。
#include <stdio.h>
#include <math.h>
#define Pi 3.1415926
int main()
{
double r=0.00, h=0.00, S=0.00, V=0.00, L=0.00;
int flag=0;
printf("请输入对应数据,输入后按Enter确认!\n");
/*
**version 1.01 此版本没有对输入的数据做容错处理不合理
*/
/*
printf("输入圆的半径r=:");
scanf("%lf", &r);
printf("输入圆锥的高h=:");
scanf("%lf", &h);
*/
/*
**version 1.02此版本重点针对输入值的容错做处理
*/
while(flag!=2){
fflush(stdin);
printf("输入圆的半径r和圆锥的高h:\n");
flag=scanf("%lf %lf", &r, &h);
if(flag==2){
if(r<=0 ||h<=0){
flag=0;//当r/h输入的值小于0时判断为失败对flag赋值0
}
}
if(flag!=2){
printf("输入值有错,请按要求输入合理的值\n");
}
}
printf("r=%f h=%f\n", r, h);
L=sqrt((r*r+h*h));
printf("%lf\n", L);
S=Pi*L*r+Pi*r*r;
V=(Pi*r*r*h)/3.0000;
printf("圆锥体积为:%0.2lf圆锥面积为:%0.2lf\n", V, S);
return 0;
}
总结:作为一个工具制造者不要把每个使用者都当成会正常使用,都是乱来的,所以要做好容错处理。