cardという配列を作り全てfalseで初期化します。その後、入力される文字によってS→0、H→1、C→2、D→3というふうにswitch文で場合分けをしてcardの配列に数字と共に格納していきます。最後にfalseのままの配列の時だけ(=入力されていない)出力する、という解放で解いてみたのですがいまいちうまく実行されません。
おかしいのはswitch文かなーと思ってはいるんですが、コンパイルも通ってしまていてソース見る限り特に間違いがあるように思えなくて困っています。どなたかアドバイスお願いいたします。
#include <iostream>
using namespace std;
int main(){
    int n=0,num=0;
    char c;
    bool card[4][13];
    cin>>n;  //手元のカードの数
    for(int i=0; i<4; i++){
        for(int j=0; j<13; j++){
            card[i][j]=false;
        }
    }
    
    for(int i=0; i<n; i++){
        cin>>c>>num;
        switch(c){
            case 'S': card[0][num-1]=true;
            case 'H': card[1][num-1]=true;
            case 'C': card[2][num-1]=true;
            case 'D': card[3][num-1]=true;
        }
    }
    for(int i=0; i<4; i++){
        for(int j; j<13; j++){
            if(card[i][j]==false){
                if(i==0) cout<<'S'<<" "<<j+1<<endl;
                if(i==1) cout<<'H'<<" "<<j+1<<endl;
                if(i==2) cout<<'C'<<" "<<j+1<<endl;
                if(i==3) cout<<'D'<<" "<<j+1<<endl;
                //cout<<" "<<j+1<<endl;
            }
        }
    }
    
    return 0;
}