【AOJ】入力されていないトランプのカードを出力

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
winter_cat
記事: 16
登録日時: 7年前
住所: Tokyo

【AOJ】入力されていないトランプのカードを出力

#1

投稿記事 by winter_cat » 7年前

 AOJのここの(http://judge.u-aizu.ac.jp/onlinejudge/d ... p?id=10015)問題について質問です。
 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;
}


Ryo

Re: 【AOJ】入力されていないトランプのカードを出力

#2

投稿記事 by Ryo » 7年前

いまいちうまく実行されません。
とは、具体的にどういうこと?

アバター
へろりくしょん
記事: 92
登録日時: 9年前
住所: 福岡

Re: 【AOJ】入力されていないトランプのカードを出力

#3

投稿記事 by へろりくしょん » 7年前

こういうのは1行1行丹念に処理を追っていくとすぐに分かります。

17行目からの switch() 文に break 文がありませんね。
ついでに26行目の for() ループの j が初期化されていません。

デバッガを使ってください。

winter_cat
記事: 16
登録日時: 7年前
住所: Tokyo

Re: 【AOJ】入力されていないトランプのカードを出力

#4

投稿記事 by winter_cat » 7年前

すみません!完全に見過ごしていました(汗)
ありがとうございますm(__)m

閉鎖

“C言語何でも質問掲示板” へ戻る