二つ組になったデータ(タイムと名前)の中で一番早いもの・一番遅いもの
・それに対応する名前を表示するプログラムです。
例えば
<入力>
aaa 10.00
<出力>
10.00 aaa
10.00 aaa
<入力>
aaa 12.00
bbb 12.00
ccc 11.00
<出力>
11.00 ccc
12.00 aaa bbb
のように同列の名前は空白で区切って、5人まで表示します。
なぜか名前が空白で一定に区切られて表示されません。
どこを直したらよいか、教えてください!
失敗例
<入力>
nitta 10.94
hotta 11.14
nakata 11.12
takata 11.21
yatta 11.21
oota 10.94
sata 11.11
tanita 10.94
<出力>
10.94 nitta oota tanita
11.21 takata yatta
<正解の出力>
10.94 nitta oota tanita
11.21 takata yatta
---------------------------------------コードです-----------------------------------------
#include <stdio.h>
#include<string.h>
char name[30];
double data,min,max;
char minName[5][30],maxName[5][30];
int minCount,maxCount,i=0,j=0;
int main(void){
scanf("%s%lf", minName[0], &min); //はじめに入力したデータをminとmaxとしておく
max=min;
strncpy(maxName[0],minName[0],30);
minCount=1;
maxCount=1;
while(scanf("%s%lf",name,&data)==2){ //データがあるかぎり繰り返し if(data<min){ //dataが一個目より小さければ strncpy(minName[0],name,30); //minnameに名前を入れる minCount++; min=data; //minにdataを入れる }else if(data==min&&minCount<5){ //もし同じデータがあったり、カウントが5以下の時 strncpy(minName[minCount++],name,30); //count番目の配列にnameを入れる }else if(data>max){ strncpy(maxName[0],name,30); maxCount++; max=data; }else if(data==max&&maxCount<5){ //もし同じデータがあったり、カウントが5以下のとき strncpy(maxName[maxCount++],name,30); //count番目の配列にnameを入れる } } printf("%.2f ",min); //最小値を表示する while(i<sizeof(minCount)+1){ //最小値と組になっている名前を表示 printf("%s ",minName[i]); i++; } printf("\n"); printf("%.2f ",max); //最大値を表示する while(j<sizeof(maxCount)+1){ //最大値と組になっている名前を表示 printf("%s ",maxName[j]); j++; } printf("\n"); return 0;
}

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。