if文とヘッダファイル<string.h>に格納されているstrcmp関数を使って 入力された文字列によって実行される命令文が変わるプログラムを作成してみましょう。


アレサ「if文とscanf関数をつかって


次のプログラムのように→」


#pragma warning(disable: 4996)


#include <stdio.h>


int main(void){

int a;

scanf("%d",&a);

if(a==0)

printf("にゃんにゃん\n",a);

else

printf("にょお~ん",a);

return 0;

}


コンパイル結果

0(と入力すると)

にゃんにゃん(が表示されます)


アレサ「→


scanf関数によって


コマンドプロンプト画面から入力された数値によって


表示される文章を選択し


にゃんにゃん

にょお~ん


と表示させることができました。


今度は


コマンドプロンプト画面から


入力された文字列によって表示される文章が


変わるよう


if文の条件式の部分に


strcmp関数を使ってみましょう。


strcmpは


string(文字列)

compare(比較してみる)


を組み合わせた造語です。



strcmp関数はヘッダファイル<string.h>に格納されていますので


使用するときには


プログラムの始めに


ヘッダファイル<string.h>をインクルードします。


strcmp関数は


strcmp(文字列a,文字列b)と表記され


文字列aと文字列bが同じ文字列の場合


strcmp(文字列a,文字列b)は0というデータ(戻り値)


を持つよう設定されています


次のプログラムで


その様子を観察してみましょう。


#pragma warning(disable: 4996)


#include <stdio.h>

#include <string.h>


int main(void) {


if (strcmp("みゃお~ん", "みゃお~ん") == 0)

printf("にゃんにゃん\n");

return 0;

}


コンパイル結果


にゃんにゃん




数学におけるf(x)=x+1のxに数値1が代入されると


f(1)=2の値をもつように


strcmp(文字列a,文字列b)は0というデータ(戻り値)を


持つというわけです


では


次のプログラムをご覧ください


余裕をもってコマンドプロンプト画面から入力された文字列をうけとれるよう


配列hairetuの要素数は10000にしてあります


#pragma warning(disable: 4996)


#include <stdio.h>

#include <string.h>


int main(void){


char hairetu[10000];

scanf("%s",hairetu);

if(strcmp(hairetu,"みゃお~ん")==0)//←注目ポイントはここです

printf("にゃんにゃん\n");

else

printf("にょお~ん\n");

return 0;

}


コンパイル結果

みゃお~ん(と入力すると)

にゃんにゃん


と表示されます



strcmp関数は


プログラム内で


if(strcmp(hairetu,"みゃお~ん")==0)


のように用いることもできます


つまり


文字列が格納される配列hairetuの


アドレスが格納されているポインタ変数


hairetuを


strcmp関数の第1引数に


文字列を直接記入する代わりに


かきこむことができます。


コンパイル後


アンダーバー


_


が表示される入力待ち受け状態の


コマンドプロンプト画面から


scanf関数をつかって配列 hairetuに


文字列みゃお~んが格納された場合


strcmp(hairetu,"みゃお~ん")は0という戻り値を持つよう


に設定されています。


ですので


if(strcmp(hairetu,"みゃお~ん")==0)が成立するので


if(strcmp(hairetu,"みゃお~ん")==0)が成立した場合


に実行される命令文


printf("にゃんにゃん\n");


が実行され


コマンドプロンプト画面に


にゃんにゃん


が表示されます。


コンパイル後の入力待ち受け状態のコマンドプロンプト画面で


にゃあああおお~ん


と入力すると


if(strcmp(hairetu,"みゃお~ん")==0)が成立しないので


printf("にゃんにゃん\n");

のかわりに

printf("にょお~ん\n");

が実行され


コマンドプロンプト画面に


にょお~ん


が表示されます。」


アレサ「ねこちゃん同士のあいさつのようですね。


みゃお~ん


という言葉に対して


にゃんにゃん



返しているというわけですの。」


ソーラー「ねこのあいさつか・・・


これってパスワードを入力すると


管理画面が開く 


というところで使われてそうだね」



🌞    🌞     🌞


次のプログラムのように

if(strcmp(hairetu,"みゃお~ん")==0)と表記しなくても

if(hairetu=="みゃお~ん")と表記することにより


strcmp関数をつかわなくても配列に入力された文字列によって


表示される文章を変更できそうな気がします


#pragma warning(disable: 4996)


#include <stdio.h>

#include <string.h>


int main(void){


char hairetu[10000];

scanf("%s",hairetu);

if(hairetu=="みゃお~ん")/*この部分を変更しました*/

printf("にゃんにゃん\n");

else

printf("にょお~ん\n");

return 0;

}


コンパイル結果

みゃお~ん(と入力すると)

にょお~ん


このプログラムをよくみると



みゃお~んと入力されて


if(hairetu=="みゃお~ん")が成立しているように


みえますが


にゃんにゃんが表示されていないのがわかります。


このように


入力された文字列によって


表示される文章を変更するためには


if文の条件式にstrcmp関数を使う必要があります。


先のプログラム


#pragma warning(disable: 4996)


#include <stdio.h>


int main(void){

int a;

scanf("%d",&a);

if(a==0)

printf("にゃんにゃん\n",a);

else

printf("にょお~ん",a);

return 0;

}


コンパイル結果

0(と入力すると)

にゃんにゃん(が表示されます)



のように


入力された数値によって


表示される文章を変更するためには


if(a==0)と表記するだけでよかったのに


面白い仕組みとなっていますね。

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます