38 用break和continue改变流程 课后
2015-12-18 21:01
447 查看
项目一
代码:
/*计分器扩展版*/
#include <stdio.h>
#define n 10
int main()
{
double a,sum,max,min,b;
char c;
int i;
do
{
sum=0;
max=-1;
min=11;
i=1;
do
{
printf("请输入第%d位评委的打分",i);
b=scanf("%lf",&a);
if(b==0)
{
printf("非法字符,请输入0-10之间的数\n");
rewind(stdin);//重新指向键盘缓冲区开头,或者用fseek(stdin,0L,2)和while ( (c = getchar()) != '\n' && c != EOF)或者fflush(stdin)也是可以的
continue;
}
else if(a>=0&&a<=10)
{
sum=sum+a;
if(a>max)
max=a;
if(a<min)
min=a;
}
else
{
printf("输入错误!请重新输入\n");
continue;
}
i++;
}while(i<=10);
printf("评委给出的最高分为%f\n",max);
printf("评委给出的最低分为%f\n",min);
printf("减去一个最高分%f,减去一个最低分%f\n",max,min);
printf("该选手最后的总得分为%f\n",sum-max-min);
printf("该选手最后的平均分为%f\n",(sum-max-min)/(n-2));
printf("该选手的成绩统计完毕,退出请按N,继续统计下一位请按任意键……………\n");
fflush(stdin);
c=getchar();
}while(c!='n'&&c!='N');
return 0;
}
查阅了很多相关资料,这里用了一个利用scanf返回值来判断输入的是否是非法字符的方法,当输入不符合scanf输出格式的字符时候,scanf返回值为错误的那个减一,反之为正确输入并赋值的个数,我们可以判断其返回值来判定我们输入的字符是否是我们我们需要的格式
项目二
代码:
/*打豆豆*/
#include <stdio.h>
#define n 10
int main()
{
char a;
do
{
printf("* 1. 吃饭\n");
printf("* 2. 睡觉\n");
printf("* 3. 打豆豆\n");
printf("* 0. 退出\n");
printf("* 请选择(0-3):");
rewind(stdin);//这句是防止第二次循环a的值被缓冲区其他数据赋值
scanf("%c",&a);
if(a=='0')
{
printf("哎啊!我撤退!\n");break;
}
else switch(a)
{
case '1':
printf("我饿,我吃我吃我吃吃吃!\n");break;
case '2':
printf("我困,我睡我睡我睡睡睡!\n");break;
case '3':
printf("我烦,我打我打我打打打!\n");break;
default:
printf("笨蛋!输入错误,重新输入\n");
}
}while(1);
return 0;
}
这题因为我们要在输入0的时候跳出整个程序,所以我们单独处理,这里要注意,break不对if-else语句起作用,它会跳出包含if语句的这个循环,只跳出一层循环
代码:
/*计分器扩展版*/
#include <stdio.h>
#define n 10
int main()
{
double a,sum,max,min,b;
char c;
int i;
do
{
sum=0;
max=-1;
min=11;
i=1;
do
{
printf("请输入第%d位评委的打分",i);
b=scanf("%lf",&a);
if(b==0)
{
printf("非法字符,请输入0-10之间的数\n");
rewind(stdin);//重新指向键盘缓冲区开头,或者用fseek(stdin,0L,2)和while ( (c = getchar()) != '\n' && c != EOF)或者fflush(stdin)也是可以的
continue;
}
else if(a>=0&&a<=10)
{
sum=sum+a;
if(a>max)
max=a;
if(a<min)
min=a;
}
else
{
printf("输入错误!请重新输入\n");
continue;
}
i++;
}while(i<=10);
printf("评委给出的最高分为%f\n",max);
printf("评委给出的最低分为%f\n",min);
printf("减去一个最高分%f,减去一个最低分%f\n",max,min);
printf("该选手最后的总得分为%f\n",sum-max-min);
printf("该选手最后的平均分为%f\n",(sum-max-min)/(n-2));
printf("该选手的成绩统计完毕,退出请按N,继续统计下一位请按任意键……………\n");
fflush(stdin);
c=getchar();
}while(c!='n'&&c!='N');
return 0;
}
查阅了很多相关资料,这里用了一个利用scanf返回值来判断输入的是否是非法字符的方法,当输入不符合scanf输出格式的字符时候,scanf返回值为错误的那个减一,反之为正确输入并赋值的个数,我们可以判断其返回值来判定我们输入的字符是否是我们我们需要的格式
项目二
代码:
/*打豆豆*/
#include <stdio.h>
#define n 10
int main()
{
char a;
do
{
printf("* 1. 吃饭\n");
printf("* 2. 睡觉\n");
printf("* 3. 打豆豆\n");
printf("* 0. 退出\n");
printf("* 请选择(0-3):");
rewind(stdin);//这句是防止第二次循环a的值被缓冲区其他数据赋值
scanf("%c",&a);
if(a=='0')
{
printf("哎啊!我撤退!\n");break;
}
else switch(a)
{
case '1':
printf("我饿,我吃我吃我吃吃吃!\n");break;
case '2':
printf("我困,我睡我睡我睡睡睡!\n");break;
case '3':
printf("我烦,我打我打我打打打!\n");break;
default:
printf("笨蛋!输入错误,重新输入\n");
}
}while(1);
return 0;
}
这题因为我们要在输入0的时候跳出整个程序,所以我们单独处理,这里要注意,break不对if-else语句起作用,它会跳出包含if语句的这个循环,只跳出一层循环
相关文章推荐
- 在主函数中提示用户输入用户名和密码。另写一方法来判断用户输入是否正确。该方法分别返回一个bool类型的登录结果和和一个string类型的登录信息。如登录成功,返回true及“登录成功”,若登录失败则返回false及“用户名错误”或“密码错误”(使用out参数)
- 17-1 UI高级可视化设计
- 15 UITabBarController、block高级(+UIMenuController_UIPasteBoard、MBProgressHud)
- 14-1 UITableView综合-模态viewController、单例(LED,Neon)
- 组件_ UIToolbar 与 组件_UISearchBar
- UITableView的使用
- 13 自定义cell、cell自适应高度、 多种类型的cell混合使用、 UITableViewController、model类
- <LeetCode OJ> 303. Range Sum Query - Immutable
- 12 UITableView编辑和移动 、UITableViewController、(+UIDatePicker)
- 11 UITableView表视图
- UIPickerView
- UIStoryboard和UIResponder
- UIImageView和UIImage
- 10 导航控制器UINavigationController、导航条navigationBar、界面通信(属性传值、代理传值、单例传值)
- UIAlertView与UIActionSheet
- 09 UIScrollView 、 UIPageControl
- 08-2 UISwitch and UIStepper
- IOS 开发学习笔记-基础 UI(十)九宫格布局,块动画,字典转模型,Xib使用
- 08-1 UIControl 及其子类 UISegmentedControl 、UISlider
- UIScrollView的使用