おみくじプログラムを作ってみた

#おみくじを引いてみよう

こんにちは！
早速ですが、皆さんは初詣に行っておみくじを引いてきましたか？
今回は、お正月に初詣に行けなかった方におみくじプログラムを作ってみました。
おみくじプログラムで今年のあなたの運勢を占ってみましょう！
![おみくじ1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548019/da81f233-d20c-0758-1c97-0999f4967bc4.jpeg)

##おみくじプログラム
```c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef char String[1024];

int main(void){
   printf("おみくじプログラムでおみくじをしますか？\n");
   printf("YESは1を、NOの場合は他の数字を入力して下さい\n");
   
   String answer;
   
   scanf("%s",answer);
   
   int i = atoi(answer);
   
   if(i==1){
       
       printf("%dが入力されたためおみくじを始めます!\n",i);
       
       srand((unsigned)time(0UL));
       
       int num = rand() % 7 + 1 ;
       
       switch(num){
           case 1 :
           printf("大吉\n");
           break;
           
           case 2 :
           printf("中吉\n");
           break;
           
           case 3 :
           printf("小吉\n");
           break;
           
           case 4 :
           printf("吉\n");
           break;
           
           case 5 :
           printf("末吉\n");
           break;
           
           case 6 :
           printf("凶\n");
           break;
           
           case 7 :
           printf("大凶\n");
           break;
       }
   }
   else{
       printf("%dが入力されたためおみくじをやめます\n",i);
   }
   return 0;
}
```

では、なぜこのようなことが起こるのか解説していきます。
## #include
```c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
```
まずプログラムの先頭に#includeとヘッダーファイルを入力してください。
これらは、これから出る関数などを使用する際に必要なものです。
詳しくはまた別の記事で教えます。

##printf
```c

int main(void){
   printf("おみくじプログラムでおみくじをしますか？\n");
   printf("YESは1を、NOの場合は他の数字を入力して下さい\n");
```
最初にprintf命令でおみくじをするか表示し、数字を入力させてどちらにするか促します。
ちなみに、\nを文末に入力すると次の文字から改行することができます。
##String型・scanf・atoi
次に数字を入力させます。

```c
   String answer;
   
   scanf("%s",answer);
   
   int i = atoi(answer);
```
ここではまず、String型でanswerという変数を作ります。
String型とは、文字列型というものです。
これを使うためには次の行をプログラムに入力してください。

```c

typedef char String[1024];
```
この行を追加すると1000文字程度の文字列型を利用できるようになります。

次にscanf命令で文字の入力を受け付けます。
文字列の場合は%sを使います。

そして、atoiという関数を使って文字列型になっているanswerのデータをint型にして整数に変換します。

##条件分岐・srand・rand
続いて、if文を使って条件分岐をさせます。

```c

if(i==1){

       printf("%dが入力されたためおみくじを始めます!\n",i);

       srand((unsigned)time(0UL));

       int num = rand() % 7 + 1 ;

       switch(num){
           case 1 :
           printf("大吉\n");
           break;

           case 2 :
           printf("中吉\n");
           break;

           case 3 :
           printf("小吉\n");
           break;

           case 4 :
           printf("吉\n");
           break;

           case 5 :
           printf("末吉\n");
           break;

           case 6 :
           printf("凶\n");
           break;

           case 7 :
           printf("大凶\n");
           break;
       }
   }
   else{
       printf("%dが入力されたためおみくじをやめます\n",i);
   }
   return 0;
}
```
if文を使って、1を入力された場合におみくじを始めるようにします。
それから、srand関数で乱数の取得を準備してrand関数で取得します。


```c
       srand((unsigned)time(0UL));

       int num = rand() % 7 + 1 ;
```
そして、int型でnumという変数を作り、rand() % 7 + 1;で1～7までの乱数を取得させます。

##switch文
次にswitch文を紹介します。

```c

 switch(num){
           case 1 :
           printf("大吉\n");
           break;

           case 2 :
           printf("中吉\n");
           break;
```
この文でnumの中にあるデータに対して結果を振り分けます。
**例**、
case 1: numのデータが1だったら大吉を表示する。
case 2: numのデータが2だったら中吉を表示する。

ちなみに、break文を組み込まないと...

>おみくじプログラムでおみくじをしますか？
YESは1を、NOの場合は他の数字を入力して下さい
1が入力されたためおみくじを始めます!
末吉
凶
大凶

このように抑えが利かなくなり他の運勢も表示してしまいます。
ですから、しっかりとbreak文を組み込んで正しく表示させるようにしましょう！

##else文
else if文もありますが、今回は他の数字を入力したらおみくじをやめるというプログラムにするためにelse文を使うようにしました。

```c

 else{
       printf("%dが入力されたためおみくじをやめます\n",i);
   }
   return 0;
}
```
else文の下にreturn 0;はおまけみたいなものなのでそこまで気にしなくても大丈夫です。

##まとめ
今回は【スッキリわかるC言語入門】という本を参考にこのプログラムを作りました。
初投稿なので、記事が見にくいなどコードの説明が誤っているところがあるかもしれません。
何かあれば是非ともご意見お待ちしています。
C言語を勉強し始めてまだまだ経験は浅いものですが、頑張ってマスターできるように精進します！