【发布时间】:2016-01-20 16:11:08
【问题描述】:
有一个问题,它取 no: 的情况,在每种情况下都取 no: 的对象,每个对象要么是点,要么是圆或线段。我已经编写了完整的代码,但开关盒不起作用。任何建议表示赞赏。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int test,nob,ans[4],px,py,cx,cy,cr,lx1,ly1,lx2,ly2,flag,i,j;
char type;
scanf("%d",&test); //no:of test cases
while(test) {
flag=0;
scanf("%d",&nob); //no:of objects
while(nob)
{
scanf("%c\\n",&type); //what type of object
switch(type)
{
case 'p':
{
scanf("%d%d",&px,&py);
if((px<=ans[0] && py<=ans[1] && px>=ans[2] && py>=ans[3])|| flag==0) {
ans[0]=px;ans[1]=py;ans[2]=px;ans[3]=py;
}
break;
}
case 'c':
{
scanf("%d%d%d",&cx,&cy,&cr);
if((cx-cr<=ans[0] && cy-cr<=ans[1] && cx+cr>=ans[2] && cy+cr>=ans[3])|| flag==0) {
ans[0]=cx-cr;ans[1]=cy-cr;ans[2]=cx+cr;ans[3]=cy+cr;
}
break;
}
case 'l':
{
scanf("%d%d%d%d",&lx1,&ly1,&lx2,&ly2);
if((lx1<=ans[0] && ly1<=ans[1] && lx2>=ans[2] && ly2>=ans[3])|| flag==0) {
ans[0]=lx1;ans[1]=ly1;ans[2]=lx2;ans[3]=ly2;
}
break;
}
default:
printf("you entered wrong letter.");
}
flag=1;
nob--;
}
for(i=0;i<4;i++)
{
printf("%d ",ans[i]);
}
printf("\n");
test--;
}
return 0;
}
当您运行此程序时,switch case 不起作用。我认为输入类型字符有问题。请帮助我。我已经尝试解决这个错误 3 天了。
【问题讨论】:
-
答案解释了故障,但当错误条目导致
default情况时,是否也应该不设置flag和nob? -
@Weather vane,对不起..我不明白你问了什么。
-
我是说,在
switch语句之后,您修改了flag和nob。但是如果有一个无效的输入,导致default:的情况,你还想要这两个变量更新吗?如果没有,请将它们移至其他每个人(成功)case语句。查看答案的更新。 -
是的,我不认识它。答案的更新是正确的。我会改变它。谢谢。
标签: c switch-statement character scanf