C中的字符输入和开关情况有问题吗?

时间:2016-01-20 16:11:09

标签: c switch-statement character scanf

有一个问题,它采用no:of case并且在每种情况下它不采用对象,每个对象是一个点或圆或线段。我写了完整的代码,但是开关盒没有用。任何建议都表示赞赏。

#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天。

1 个答案:

答案 0 :(得分:3)

padding-right之前必须有一个空格 - 此处不需要%c

\\n

否则,上一个scanf(" %c", &type); //what type of object 中的newline\n)将被视为scanf()type不需要这样做。)< / p>

您还需要定义%d

ans

未使用int ans[4] = {0}; - 可以删除:

j

此外,正如Weather Vane所述,如果'j' : unreferenced local variable 输入错误,则不应更新typeflag。您可以按如下方式解决此问题:

nob