めんとすクエスト

クエストならいいってもんじゃない

3回タイプしたら何が起きてるのか分からなくなった話

おひさしぶりです、めんとすです。

 
ものすごく唐突な話ですが、わたくし、情報(仮)系学生1年生で、現在課題としてC++で大富豪を作っています。
 
どうにもプログラミングはド下手というか脳の処理がぶっとぶというか、まぁ若干苦手なんです。おかげさまでまだ完成してないのに400行目前です。SAさん(授業の手伝いをしてくれる先輩)に「長っ…」と言われ、すこし傷つきました。
 
 

ここまでのあらすじ

 
ポインタは授業で扱わなかったので避けて通っていたら、グローバル変数がぽんぽんぽんぽん増えてしまい、あまりよろしくないような気がします。しかし、まずは完成させることが目標です。
 
偉い人がこう言っていました。
まずは完成させろ
と。
Twitterの名言botみたいなやつで見かけた気がします。というか、その辺で誰でも言ってる気がします。
 

 

今日の学習

はい、いきなり結論。
 
使う技術の仕様はちゃんと確認しておこう。
 
はい、これです。うっかりさんでした。
 
実はsort()を利用して、階段で出そうとしていたのですが、なぜかうまくいかない。
階段で出しても階段と判定されなかったんですね。
ちなみに元のアルゴリズム?流れは大雑把に言うと、
 
vectorに階段で出すカードを格納する
vectorをsort()で並び替え
vector[i] == vector[i+1] - 1なら階段で処理
 
としていました。
 
しかし、うまくいかない。
 
なんでだろうなぁ、と頭を抱えつつ、Twitterを眺めたりぷよクエしたりスクフェスしたり、煎餅かじったりといろいろなことをしました。え?何も関係ないどころか遊んでるだろ?……き、気分転換ですよ!
 
とにかく、スクフェスしゃんしゃんしてから、コードを眺めていた時気付いたんです。
 
sort()で昇順なんだから[i]より[i+1]の方が小さくなってるじゃん…!!
 
と。
 
つまり、vector[i] == vector[i+1] + 1のときが階段になってたんです!
そりゃうまくいかないわけですよ。
 
 
こんな意味不明なうっかりをやらかす辺り、まだまだひよっこド素人だなぁと痛感しました。
 
次は同じ数字のカードを同時に出す設定をつける予定です。
でも他の課題で首が回ってないので、もしかしたら挫折するかもしれません。
 

いきなり急募

 
scanf("%d", &num);で整数ではなく文字列を入力された時に無限ループさせない方法を募集です。
この例外処理?が驚くほどできません。
だって今までそんな入力はないものとする、で課題が出てたんだもの!!
 
wikipediaに載ってたやり方だと、うまくいかない場合もあり(どんなときにうまくいかないのかまでは把握できなかった)、現在無限ループがぽんぽん発生する雑魚コードになっています。
 
非常に辛い。
 
それでは、この辺で寝ることにします。
おやすみなさい:)