五月舞 2020-12-18 22:30 采纳率: 100%
浏览 737
已采纳

switch语句 选项内部如何跳出和结束switch

 

目前主要出现在switch语句case4

我输入4 再输入n的时候 虽然会结束switch 但是还是会重新进入一遍case4 导致打印出现两次

调试的时候发现A = 10\n

而且输入y让程序继续通过switch运行的话 却没有什么反应 一直重复case4

麻烦大佬帮帮我这个萌新 已经想了一天了 还是找不到解决方法

 

 

#include<stdio.h>
int main(){
start:
    int A[100],B[100];
    int number1,number2,i,j;
    int a = 0;
    //A B集合元素的个数计算 
    int countA = 0;
    int countB = 0;
    printf("请输入你想输入A集合的元素个数(不超过100个):\n");
    scanf("%d", &number1);
    printf("请输入集合A的元素:\n");
    for(i = 0;i < number1;i++){
        scanf("%d", &A[i]);
        countA++;
    }
    printf("请输入你想输入B集合的元素个数(不超过100个):\n");
    scanf("%d", &number2);
    printf("请输入集合B的元素:\n");
    for(i = 0;i < number2;i++){
        scanf("%d", &B[i]);
        countB++;
    }
    //无序性判断 
    if(countA == countB){
        int count = 0;
        for(i = 0;i < number1;i++){
            for(j = 0;j < number2;j++){
                if(A[i] == B[j]){
                    count++;
                }
            }
        }
        if(count == number1){
            printf("两个数组一样请重新输入\n");
            goto start;
        }
    }
    //互异性  (为了防止i,j同时取到最后一个元素,让j = i + 1) 
    for(i = 0;i < number1;i++){
        for(j = i + 1;j < number1;j++){
            if(A[i] == A[j]){
                printf("数组A中含有一样的数请重新输入\n");
                goto start;
            }
        }
    }
    for(i = 0;i < number2;i++){
        for(j = i + 1;j < number2;j++){
            if(B[i] == B[j]){
                printf("数组B中含有一样的数请重新输入\n");
                goto start;
            }
        }
    }
    printf("****************************************\n");
    printf("请分别输入集合A和集合B的元素:\n");
    printf("请选择(1-5)要进行的集合运算:\n");
    printf("1-----集合的交运算(A ∩ B)\n");
    printf("2-----集合的并运算(A ∪ B)\n");
    printf("3-----集合的差运算(A-B)\n");
    printf("4-----继续/退出(y/n)\n");
    printf("****************************************\n");
restart:
    while(a != 1){
        int number;
        scanf("%d", &number);
        switch(number){
            case 1:
                printf("结果为:");
                for(i = 0;i < number1;i++){
                    for(j = 0;j < number2;j++){
                        if(A[i] == B[j]){
                            printf("%d\t", A[i]);
                        }
                    }
                }
                printf("\n");
                printf("请继续选择\n");
                break;
            case 2:
                printf("2\n");
                break;
            case 3:
                printf("3\n");
                break;
            case 4:
                char A;
                printf("继续请输入y,退出请输入n\n");
                scanf("%c", &A);
                if(A == 'n'){
                    a = 1;
                }else if(A == 'y'){
                    goto restart;
                }
                break;
            default:
                printf("输入了错误的输入请重新输入\n");
        }
    }
    return 0;
}


 

  • 写回答

1条回答 默认 最新

  • 追逐时代的脚步 2020-12-18 22:54
    关注

    建议你把scanf("%d", &number);和scanf("%c", &A);改成 scanf("%d\n", &number);和scanf("%c\n", &A);在试一下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA
  • ¥20 csv格式数据集预处理及模型选择