「四聖龍神録」楽しくPLAYさせて頂きました^^v
以前からこちらのサイトを拝見させて頂いており、
将来的には自分もシューティングゲームを作りたいと思っています><
「シューティングゲームの館」では、
あまり前提知識を要さなくともゲームを作る楽しさを教えて下さるとの事ですが、
元々C言語には興味があり(プログラムと言えばCしか聞いたことなかっただけですがf^^;)
今はC言語の基礎を少しずつ勉強しています。
そんな中、分からない事がでてきましたのでご教授頂ければ幸いですm(__)m
Windows XP
Visual Studio 2005 を使用しています。
問題は、
0~100の範囲で入力された複数の数値の中から、最大値と最小値を求めて表示するプログラムの作成です。
条件として、
・-1が入力された時点で数値の入力は終了する。
・最大値と最小値はmain関数以外の関数で求める。
・入力された数値を記憶する配列は10とする。
・数値の範囲を0~100としているが、それ以外の数値が入力された場合の事は考えて無くても良い。
#include<stdio.h> int sub(int suuti[/url],int *max,int *min); int main(void) { int i=0,suuti[10],max=0,min=100; for(i=0;i<10;i++){ printf("%d番目の数値を入力して下さい。",i+1); scanf("%d",&suuti); if(suuti == -1) break; } sub(suuti,&max,&min); printf("最大値は%d 最小値は%d",max,min); fflush(stdin); getchar(); return 0; } int sub(int suuti[/url],int *max,int *min) { int i; for(i=0;i<10;i++){ if(*max < suuti){ *max = suuti; } if(*min > suuti){ *min = suuti; } if(suuti == -1){ break; } } return 0; }
上記のプログラムでは自分の期待する結果が得られます。
が、これは問題が解けず、解答を見て自分のソースを改善したプログラムです。
ポインタについてまだ全然理解していないですが、このプログラムについては、
sub関数で変数 max と min のアドレスに数値を代入し、main関数でそのアドレスから数値を取り出してる?
と自分では理解しています。(間違っていれば指摘お願いします><ポインタ難しいです;;)
が、なぜそうしなければならないのかが分かりません。
下記のプログラムは解答を見る前に自分が書いたものです。
#include<stdio.h> int sub(int suuti[/url],int max,int min); int main(void) { int i=0,suuti[10],max=0,min=100; for(i=0;i<10;i++){ printf("%d番目の数値を入力して下さい。",i+1); scanf("%d",&suuti); if(suuti == -1) break; } sub(suuti,max,min); printf("最大値は%d 最小値は%d",max,min); fflush(stdin); getchar(); return 0; } int sub(int suuti[/url],int max,int min) { int i; for(i=0;i<10;i++){ if(suuti == -1){ break; } if(max < suuti[i]){ max = suuti[i]; } if(min > suuti[i]){ min = suuti[i]; } } return 0; }
自分としてはこれで問題ないと思っていたのですがf^^;
「main関数で宣言しているmaxとmin」と「sub関数内のmaxとmin」は別の物なんでしょうか?
maxとminをグローバル変数で宣言したらいいのかとも思いましたが、結果に変化なかったですf^^;
話が横道にもそれ、長くなりましたが、
何故このプログラムで最大・最小を求められないのか教えて頂きたいです。
宜しくお願いします。