名簿の一番先頭の方の名前が出力したくて試行錯誤されたみたいですね。
では、まずは名簿の一番先頭の方の名前を出してあげましょう。
①関数内のif文でやりたいことは分かりますが、書き方が違います。
コード:
if(x.name < y.name)
return x;
else
return y;
やりたいことはわかります。
プログラミング初心者はおろか、中級者でさえ同じ間違いをされます。
ひとまずここでは名前の先頭の文字で比較するために
コード:
if(x.name[0] < y.name[0])
return x;
else
return y;
とします。
もちろん、ここから先も改良が必要ですが、まずは名前の先頭の文字だけで比較するようにしてみましょう。
②min宣言時に値を入れるとエラー。
私のPCだけかも知れませんが、エラーが出ました。
③3人のデータを入れる場合は配列の要素数は3でよい。
コード:
struct person tbl[4],min;
とされていますが、3人分のデータのみ扱う場合は、
コード:
struct person tbl[3],min;
とします。あまり大きな問題ではないので直す必要はありません。
④それに伴ってfor文の真ん中の条件式も<=ではなく<を使う。
コード:
for(i=0 ; i<=3 ; i++){
printf("名前?");
scanf("%10s",&tbl[i].name[0]);
}
for(i=1 ; i<=3 ; i++)
min = shoujun(min,tbl[i]);
for文では、iの値が0,1,2,3と4つの値が使われます。
すなわち、4人分の処理を行おうとしています。
ですので、条件式を
コード:
for(i=0 ; i<3 ; i++){
printf("名前?");
scanf("%10s",&tbl[i].name[0]);
}
for(i=1 ; i<3 ; i++)
min = shoujun(min,tbl[i]);
こうするとiの値が0,1,2,となり、3人分の処理で済みます。
⑤minに値を入れるのは入力が終わった後。
名前の入力が全て終わった後に、
とすると、minに最初の方の名前が入ります。
宣言時の代入では、最初の方の名前が入りません。
⑥main()
エラーが出ましたので、私のほうではvoid main()と書き換えました。
以上の6点を直すと、名簿の一番先頭の方の名前のみが出力されるプログラムになります。
また分からない点が出てきましたら、お気軽にご質問ください(*´▽`*)