第13回

関数に文字列を

00/06/29 サンプルプログラムのインデントを改善した
98/11/06 IE4.xに対応させた
98/04/29メールアドレス訂正

以下は、前回の改良版sakebi関数に対応させた(だけの)mainです。おっと、せっかくですので、全プログラムを掲載することにしましょう。

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

int sakebi(int a,int b);


main(){
int dmg;
    srand((unsigned int)time(NULL));

    printf("これは、お前に踏み潰されたスライムの痛みだッ!!\n");
    dmg=sakebi(3,10);
    printf("ラスボス(首)は、%dポイントのダメージ!!\n",dmg);

    printf("これは、ひなたぼっこ中に不意打ちを喰らったゴブリンの怒りだッ!\n");
    dmg=sakebi(6,100);
    printf("ラスボス(腹)は、%dポイントのダメージ!!\n",dmg);

    printf("ええと、余計なお世話の回復呪文で浄化してしまったスケルトンの分だぁッ!\n");
    dmg=sakebi(9,0);
    printf("ラスボス(右足すね)は、%dポイントのダメージ!!\n",dmg);

    printf("そしてこれは、全てを失った俺の怒りだッ!!\n");
    dmg=sakebi(0,10000);
    printf("カウンターッ!!\n貴方は、%dポイントのダメージ!!\n",dmg);
    printf("ぐふッ。\n");
}
int sakebi(int a,int b){
int i;

    if(b!=0)b=rand()%b+1;
    if(a==0)printf("いい加減にしろ。>いーざ\n");
    else{
        printf("うぎゃ");
        for(i=0;i<a;i++)printf("ぁ"); 
        printf("ッ!!\n");
    }
    return b;
}

main内の処理の中で(個人的に)気に食わないのが、与えた(与えられた)ダメージの出力処理がいくつもあることです。それならば、いっそのことsakebi関数の中に、ダメージを表示する処理も含めてしまった方がいいと思います。あ、今回はmain側の改良だったんでしたっけ。結局はsakebi関数も改良することになりました。すみません。
まず、sakebi関数のパラメータについて考えることにしましょう。今回の改良によって、新たに関数へ渡す必要のある値は何でしょう?・・・・・はい、そうです。「ダメージを与えられた人物名」です(って考えていたのと合ってました?)。これは文字列型、つまりchar *です。うーむ。久しぶりのポインタの登場です。でも、ここまで乗り越えてきた貴方なら、何も慌てる必要はないでしょう。それと、sakebi関数のパラメータの引数をちょっと並び替えることにします。人物名を先頭(1番目の引数)にします。で、その関数プロトタイプは以下のようになります。
int sakebi(char *c,int a,int b);

で、出来たのが以下です。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int sakebi(char *c,int a,int b);

main(){
    srand((unsigned int)time(NULL));

    printf("これは、お前に踏み潰されたスライムの痛みだッ!!\n");
    sakebi("ラスボス(首)",3,10);

    printf("これは、ひなたぼっこ中に不意打ちを喰らったゴブリンの怒りだッ!\n");
    sakebi("ラスボス(腹)",6,100);

    printf("ええと、余計なお世話の回復呪文で浄化してしまったスケルトンの分だぁッ!\n");
    sakebi("ラスボス(右足すね)",9,0);

    printf("そしてこれは、全てを失った俺の怒りだッ!!\n");
    sakebi("カウンターッ!!\n貴方",0,10000);
    printf("ぐふッ。\n");
}
int sakebi(char *c,int a,int b){
int i;

    if(b!=0)b=rand()%b+1;
    if(a==0)printf("いい加減にしろ。>いーざ\n");
    else{
        printf("うぎゃ");
        for(i=0;i<a;i++)printf("ぁ"); 
        printf("ッ!!\n");
    }
    printf("%sは、%dポイントのダメージ!!\n",c,b);
    return b;
}
つづく(今回は短いな)。

[メニュー][第12回][第14回]

いーざ
email:CQP00202@nifty.ne.jp