pon

日常のこととグルメなことを発信しています

const char*の引数はLPCWSTRのパラメータと互換性がありませんの対処法

visualstudioで文字設定が「unicode」になっているとchar型の引数が受け付けてもらえなくなる。

対処方法

右側のプロジェクトを右クリック→[プロパティ]→[詳細]→文字セットを変更

これで解決できる。

まだまだ文字コードについて初心者なので勉強しようと思う。

関数のポインタ渡しと参照渡しのちがい

みんなこんちゃ
今回は初心者にとってもっともつまずきやすい関数のポインタ渡しと参照渡しの違いについてわかりやすく説明しようと思う。

ちな、おれも初心者だから間違えていたらコメントで指摘していただけるとありがたいんご。

ポインタ渡しとは

まずポインタ渡しの例を交えて説明する

void changeNum(int*);
int main() {
    int n = 5;
    cout << "変更前" << n << endl;
    changeNum(&n);
    cout << "変更後" << n << endl;
}

void changeNum(int* n) {
    *n *= 2;
}

ちなみにこの結果は

変更前5
変更後10

となる。
関数のポインタ渡しとはその名の通り引数にポインタを渡すこと。
そんで関数の呼び出しの時にアドレスを渡してあげる。このchangeNum関数はnの値を書き換えることになる。だから書き換えた後は当然nの結果は変わってくる。

参照渡し

参照渡しの例

void swap(int&, int&);

int main() {
	int a = 1, b = 2;
	cout << "a = " << a << " b = " << b << endl;
	swap(a, b);
	cout << "a = " << a << " b = " << b << endl;
	return 0;
}
void swap(int& a, int& b) {
	int tmp;
	tmp = a;
	a = b;
	b = tmp;
}

結果は上と同じになるので省略。これは変数を引数として渡すことでその変数の値を書き換えることができる。つまり、ポインタ渡しと参照渡しは実質同じことをやっている。

で、何が違うのかというと最大の違いは呼び出すときにある。

ポインタ渡しは、呼び出す際に引数もポインタ、もしくは変数のアドレスを与えなくてはならないのに対し、参照渡しの場合、変数の名前をそのまま記入すればよいということ。

はい。以上。

文字列を反転させる方法(c言語)

今日も一人でもくもく会を開いております。中島でございます。

さて今日は「入力した文字列を反転させる」方法についてアウトプットしていこうと思う。

期待される出力

入力された文字: abcd
反転させた文字: dcba

ほんじゃやってこう

ソースコード

#include <stdio.h>

// 文字列を逆順にする
void main(){
    int len = 0;
    char temp = '\0';
    char a[5];
    char *s = &a[1];
    char *head = NULL;
    char *tail = NULL;

   

    // 操作前
    printf("文字列を入力してください:");
    scanf("%s",s);
    printf("Input: %s\n", s);
    
    // 文字列の長さを取得する
    len = 0;
    head = s;
    while(*head != '\0'){ head++; len++; }

    // 逆にする
    head = s;
    tail = &s[len-1];
    while(head != tail){
        temp = *head;
        *head = *tail;
        *tail = temp;
        
        head++;
        if(head == tail){ break; }
        tail--;
    }
    
    // 操作後
    printf("Output: %s\n", s);
   
}

ここでポイントとなるのがポインタを理解していないとこのコードは書けない。

ポインタを理解してなかったから俺はこのコードを書くのに3時間も費やしちゃったってわけ。

具体的にわからなかった部分

 head = s;
    tail = &s[len-1];
    while(head != tail){
        temp = *head;
        *head = *tail;
        *tail = temp;
        
        head++;
        if(head == tail){ break; }
        tail--;

まあ、反転するプログラムを書くことが目的なのだからここがわからないのも当然。

んで、ここで何をやっているかというと
空の文字列を一つ用意して、そのなかに反転したい文字列の先頭の文字を入れる(*head)。そしてheadとtailを入れ替える。
で、headとtailがさす文字をどんどんずらしていく。

ああ、難しかった。

一服しよ。。。。

xcodeでデバッグの時に変数が表示されない時の対処法

最近デバッグなるものをしっかりと身につけようと思いデバッグをしながらコードを書いていくと問題が。。。。


f:id:daiki0421kun:20191209115501p:plain

そう。突然変数名や変数の値が表示されなくなったのだ。

調べてみると

「console」が表示されてないんじゃね?と書いてあるので[view]→[debug area]→[activate console]の手順で表示させたがなにも変わらず。

もっとよく調べてみると画面の切り替えができるそう。

右下のウィンドウボタン見たいのを押すと表示が切り替わるらしい。押してみると





f:id:daiki0421kun:20191209115907p:plain


あっっっっっっっ。。。。。

はい。右下のウィンドウボタンを押してみましょう。
普通に表示されましたとさ。要はactivateされてたけど俺が表示させてなかったってことなのねwwww

【Unity】SerializeFieldとpublicの違い

最近Unityを勉強していてserializeFieldとpublicの違いに疑問をもったので備忘録として書いておきます。

 

そもそもserializeFieldとはなんだ?

そもそもserializeFieldがなんだかよくわかりませんでした。調べてみると

シリアライゼーションは、データ構造やオブジェクトの状態を Unity が保存して後で再構成できる形式に変換する自動プロセスです。 

 ほうほう。

まあ、ようはスクリプトで保存をした後にinspectorで編集できるよということなんでしょうね。

じゃあpublicとおなじじゃね?

まあ、結論からいうと同じではないです。同じだったら必要ないし。

他のスクリプトで書き換えられるのがpublic

他のスクリプトで書き換えられないのがserializeField

で、調べていると開発している環境によって変えるのが良さそう。

開発している環境とは

・チーム開発

・個人開発

という環境です。

チーム開発の場合

チーム開発の場合はserializeFieldを使うのが良さそうです。

先ほど行ったようにserializeFieldは他のスクリプトから書き換えが可能です。

なのでチーム開発中にpublicで書いてしまうと自分が意図していない数値に他人に書き換えられてしまうので開発に支障が出てしまいます。

個人開発の場合

一方個人開発の場合はpublicで書いても問題なさそうです。個人で開発している分には編集するのは自分しかいませんので好きに数値を書き換えられます。

 

qiita.com

僕が参考にしたのはこの記事です。この記事では実際に動かしているので視覚的に理解できます。

ぜひもっと知りたいという方はこの記事をさんこうにしてみてくださいね〜

【超簡単!】jQueryで順番にアニメーションを行う方法!

はじめに

複数のアニメーションを実装した時に一つのアニメーションが終わった後に次のアニメーションを実装したい時ってありますよね。

普通に処理を書くだけだと同時に実行されてしまう。

どうにかならんものかと思い調べました。

方法はかなりたくさんあったのですが今回は一番簡単だと思うものだけを紹介していこうと思います。

コールバック関数を使う

方法は簡単でコールバック関数というものを使います。

コールバック関数とは簡単にいうとこの処理の次に次の処理をしてねというものです。

実際の例をみてみる

実際にコードの例をあげてみます。

今回実装したいのは

$('.name').fadeIn(4000,);
$(".intro").textillate();

下のtextillateはjavascriptのアニメーションのプラグインであるTextillate.jsの記述になります。

詳細が知りたい方は以下にリンクを貼っておくのでどうぞ。

textillate.js

<h1 class="name">Daiki Nakajima</h1>
<p class="intro">Backend engineer / Frontend engineer <br>ウェブサイトを作る職人です。</p>

ちなみにそれぞれのクラスに該当するのはこの二つ。やりたいことはまず自分の名前を4秒かけてフェードインしたあとに自分の詳細をテキストイレータで表示する。

実際にコールバックを使ってみる

では実際にコールバックを使ってみることにします。

$(function(){

  $('.name').fadeIn(4000,textillate);
  function textillate(){
    $(".intro").textillate({
      in: {
        effect: 'fadeInLeftBig',    // エフェクトの指定
        delayScale: 2.0,    // 遅延時間の指数
        delay: 50,  // 文字ごとの遅延時間
        sync: false,    // アニメーションをすべての文字に同時に適用
        shuffle: true, // 文字のランダム表示
        reverse: false, // エフェクトを逆に再生(「sync:true」のときは不可)
    },
    });
  }
});

こんな感じですね。

で、実際に動かしてみると、

あれ?アニメーションはうまくいっているのですが、<p>タグの文字が最初から表示されている状態から <h1>タグのアニメーションが終了した後にもう一回アニメーションされている。 つまり、最初から<p>タグの文字が表示されている。 と、ここでcssでdisplay; none:をして最初は隠してみるとどうだろうか。 うーん、、、 うまく表示されない。

テキストイレータはcssで隠すとダメなのかなあ、、、 未だ未解決のままです。 詳しい方いたら教えてください。

今回はコールバックについて

締まりが悪いですが今回はコールバック関数についてなのでコールバック関数についてはしっかり説明できたと思います。 ではでは。。。

【超簡単!】jQueryで順番にアニメーションを行う方法!

はじめに

複数のアニメーションを実装した時に一つのアニメーションが終わった後に次のアニメーションを実装したい時ってありますよね。

普通に処理を書くだけだと同時に実行されてしまう。

どうにかならんものかと思い調べました。

方法はかなりたくさんあったのですが今回は一番簡単だと思うものだけを紹介していこうと思います。

コールバック関数を使う

方法は簡単でコールバック関数というものを使います。

コールバック関数とは簡単にいうとこの処理の次に次の処理をしてねというものです。

実際の例をみてみる

実際にコードの例をあげてみます。

今回実装したいのは

$('.name').fadeIn(4000,);
$(".intro").textillate();

下のtextillateはjavascriptのアニメーションのプラグインであるTextillate.jsの記述になります。

詳細が知りたい方は以下にリンクを貼っておくのでどうぞ。

textillate.js

<h1 class="name">Daiki Nakajima</h1>
<p class="intro">Backend engineer / Frontend engineer <br>ウェブサイトを作る職人です。</p>

ちなみにそれぞれのクラスに該当するのはこの二つ。やりたいことはまず自分の名前を4秒かけてフェードインしたあとに自分の詳細をテキストイレータで表示する。

実際にコールバックを使ってみる

では実際にコールバックを使ってみることにします。

$(function(){

  $('.name').fadeIn(4000,textillate);
  function textillate(){
    $(".intro").textillate({
      in: {
        effect: 'fadeInLeftBig',    // エフェクトの指定
        delayScale: 2.0,    // 遅延時間の指数
        delay: 50,  // 文字ごとの遅延時間
        sync: false,    // アニメーションをすべての文字に同時に適用
        shuffle: true, // 文字のランダム表示
        reverse: false, // エフェクトを逆に再生(「sync:true」のときは不可)
    },
    });
  }
});

こんな感じですね。

で、実際に動かしてみると、

あれ?アニメーションはうまくいっているのですが、<p>タグの文字が最初から表示されている状態から <h1>タグのアニメーションが終了した後にもう一回アニメーションされている。 つまり、最初から<p>タグの文字が表示されている。 と、ここでcssでdisplay; none:をして最初は隠してみるとどうだろうか。 うーん、、、 うまく表示されない。

テキストイレータはcssで隠すとダメなのかなあ、、、 未だ未解決のままです。 詳しい方いたら教えてください。

今回はコールバックについて

締まりが悪いですが今回はコールバック関数についてなのでコールバック関数についてはしっかり説明できたと思います。 ではでは。。。