作成日: 2023/01/01
0

C言語学習 2日目(C言語学習 完了!)

今日習ったこと

2日目は全部一つのmain関数の中に書き込みました(関数などは除く)。

文字列とポインタはC#に出てこないのでコードは書きませんでした。
配列のコードは別ソースにしようとして誤って消してしまいました(汗

ということで、C言語の学習は2日で完了!

ドットインストールのstuticとポインタの講座説明がすごくわかりやすかったです。
講座の内容の他にも入力やファイルの扱いなどやってみたい事は色々ありますが、
あくまでC#の学習の前の基礎という事で、
ミイラ取りがミイラにならないように、
とっととC#学習に移ろうと思います。
(C#でも入力やファイル関連は出てくるだろうし)

まぁ処理を高速化したいときには、またCを追加学習することになるかもしれません。

結論
C#の前提ためのC言語の学習の意義は、なんとなく、C系統の流儀がわかればいいかな
というくらいの感じでした。
意外と最初から直でC#よかったかもしれないかなと(笑)
ただ、今後Cで高速処理のモジュールを作るとか使うとか有りだと思いますので、
こっちのほうが、C言語を学んだ価値が高かったと思います。
あと、ちょこまかした処理を作るためにコンソールアプリとかも面白そうだと思いました。
総じて、C言語を学んで良かったと思いました。

以下、2日目に学習したソースコード・・・
講座内容を少し(かなり)アレンジしています

#include <stdio.h>
/*
変数の有効範囲と有効期限で使う関数
*/
int funcCount(void) {
    //int func_count = 0;//自動変数
    static int func_count = 0;//静的変数 0は初期値 2回目以降はその0セット部分は無視
    func_count++;
    printf("func_count : %d\n", func_count);
}


/*
関数のセクションで使う関数
*/
char getWin(float a, float b) {

    if (a >= b) {
        return 'A';
    }
    else {
        return 'B';
    }
}
/*
応用 こちらをプロトタイプ宣言 main関数の下にこの関数を定義できるようにする
*/
void sayStartMess(void);

int main(void)
{
    /* 
    if 文
    */
    int score = 80;
    //int score = 55;
    //int score = 45;

    if (score >= 70) {
        printf("優秀!\n");

    }
    else if (score >= 50) {
        printf("まぁまぁ!\n");
    }
    else {
        printf("残念…不合格!\n");
    }


    /*
    switch 文
    */
    int rank = 2;
    //int rank = 1;
    //int rank = 3;
    //int rank = 23;

    switch (rank)
    {
    case 1:
        printf("ゴールドメダル獲得!\n");
        break;
    case 2:
        printf("シルバーメダル獲得!\n");
        break;
    case 3:
        printf("ブロンズメダル獲得!\n");
        break;
    default:
        printf("メダル獲得ならず…\n");
        break;
    }


    /*
    while文
    */
    int m = 0;
    while (m < 10)
    {
        printf("m : %d\n", m);
        m++;
    }


    /*
    for文

    continue 後のループ内処理を1回スキップ
    brale ループを抜ける

    */

    int i = 0;
    for (i = 0; i < 10; i++)
    {
        if (i == 4)
        {
            //4は縁起が悪いので出力したくない
            continue;
        }
        if (i == 9)
        {
            //苦にぶちあたったらそこでループ抜ける
            break;
        }

        printf("i : %d\n", i);
    }

    /*
    関数

    構文
    返り値の型 関数名(引数, ......){
        処理;
        return 返り値;

    } 
     *function  とか、いらないんですね
     ○○○○()があれば、すぐ関数だって読めるように癖を付けないといけないですね
     (C#の場合はメソッド?)

     返り値がないときは型を書くところにvoid
     引数がないとこはカッコの中をvoid
     にする
     mainの括りも、mainという関数である
     return 0; は成功したら0を返すというCの慣習 その場合はmain関数の型はintとなる
     return 0;を使わない場合
     void main(void){}
    */
    
    /*
     sayStartMess()関数はmain関数の下に記述してあります
    getWinの関数コードはmain関数の上に記述してあります

    */

    //sayStartMes関数はmain関数の上でプロトタイプ宣言をしているのでmain関数の下に関数を記述していても動く
    sayStartMess();

    float a_point = 6.55;
    float b_point = 7.27;
    char result;
    result = getWin(a_point, b_point);
    printf("勝利したのは Player %c\n", result);
    

    /*
    変数の有効範囲
    ローカル変数とグローバル変数
    
    */
    /*
    グローバル変数は使わないほうがいい
    グローバル変数コード例は省略

    */

    /*
    変数の有効期限
    自動変数と静的変数
    */
    //グローバル変数は使わないほうがいい
    //じゃあグローバル変数みたいに使いたいときはどうする?→static変数

    //関数定義はmain関数の上にある 関数を呼んだ数をカウントする関数
    funcCount();
    funcCount();
    funcCount();

    return 0;
}

void sayStartMess(void) {
    printf("勝負が始まった!\n");
}

実行結果:

優秀!
シルバーメダル獲得!
m : 0
m : 1
m : 2
m : 3
m : 4
m : 5
m : 6
m : 7
m : 8
m : 9
i : 0
i : 1
i : 2
i : 3
i : 5
i : 6
i : 7
i : 8
勝負が始まった!
勝利したのは Player B
func_count : 1
func_count : 2
func_count : 3

これからゲームアプリとWindowsアプリを作りたい初心者です。 ゲームアプリとWindowsアプリ、共に経験ゼロです。 これからの体験が少しでも参考になれば幸いです。 目指す事 ・C言語学習→C#学習 ・Unity (C#) の勉強 ・Unityゲーム作成 ・Windowsアプリ(C#) 作成