ページ 11

配列について

Posted: 2011年5月03日(火) 09:20
by ロビンソン
どうもこんにちは。
また、初歩的な質問をいたします。(独習C第4版146ページ)
ユーザーがサーバーの番号を入力すると、プログラムがテーブルから
そのサーバーを探して、ユーザー数を表示するものですが、

コード:

#include <stdio.h>

int main(void)
{		
	int ServerUsers[5][2]={
		{1,14},
		{2,28},
		{3,19},
		{4,8},
		{5,15}		
	};
	
	int server;
	int i;
	
	printf("サーバーの番号を入力してください:");
	scanf("%d",&server);
	
	for(i=0;i<5;i++)
		if(server==ServerUsers[i][0]){
			printf("サーバー%dには、%dユーザーがいます。\n",server,ServerUsers[i][1]);
		break;
		}
	
	if(i==5)
		printf("サーバーが見つからないよ\n");
	
	return 0;
	
}
このとき、サーバー番号が1~5を入力すると、それに対応するユーザー数が表示されるのは理解しましたが、
i==5のとき、サーバーが見つからないというのが、よくわかりません。
サーバー番号を、例えば、10を入れようが、20を入れようが、
i==5の条件を満たす意味がよくわかりません。
要は、格納されていない数字を入れた場合は、i==5となるという意味なのでしょうか?
お時間あれば、ご教授願います。

Re: 配列について

Posted: 2011年5月03日(火) 09:32
by たかぎ
コンピュータになったつもりで、順にプログラムを追っていけば(脳内で実行すれば)わかります。

Re: 配列について

Posted: 2011年5月03日(火) 10:28
by box
ロビンソン さんが書きました:

コード:

	for(i=0;i<5;i++)
		if(server==ServerUsers[i][0]){
			printf("サーバー%dには、%dユーザーがいます。\n",server,ServerUsers[i][1]);
		break;
		}
このfor文で、サーバー番号を発見できずにループを回りきってしまった場合、
変数 i の値はいくつになっているでしょうか。

Re: 配列について

Posted: 2011年5月03日(火) 11:15
by タニー

コード:

#include <stdio.h>
 
#define MAX_SERVER_LIST 5 /* わかりやすいように5という数字を置き換えます */
int main(void)
{       
    int ServerUsers[MAX_SERVER_LIST][2]={
        {1,14},
        {2,28},
        {3,19},
        {4,8},
        {5,15}      
    };
    
    int server;
    int i;
    
    printf("サーバーの番号を入力してください:");
    scanf("%d",&server);
    
    for(i=0;i<MAX_SERVER_LIST;i++)                        /*サーバーリスト分 forを回します。*/
        if(server==ServerUsers[i][0]){                       /*もし入力した数字が同じ場合サーバーの情報を表示します。*/
            printf("サーバー%dには、%dユーザーがいます。\n",server,ServerUsers[i][1]);
        break;                                                        /*ミツカッタ場合は此処でfor文を終了します。*/
        }
    
/*
        見つからなかった場合iの数はfor文をまわりきっているのでMAX_SERVER_LISTと同じ数になっています
        なので、此処で見つからない場合にif(i==MAX_SERVER_LIST)をすればみつからなかった場合の処理をしてくれます。
*/
    if(i==MAX_SERVER_LIST)                                   
        printf("サーバーが見つからないよ\n");
    
    return 0;
}


Re: 配列について

Posted: 2011年5月03日(火) 14:47
by ロビンソン
タニーさん、回答ありがとうございます。
よくわかりました。
forは、該当番号がないとき、回りきって、max値になっているので、
max値のときは、不明と表示しているのですね。