成績の平均点に応じて学籍番号、名前を降順に表示させたい
ここに質問の内容を詳しく書いてください。
テキストファイルを読み込みその読み込んだ値を元に平均点を計算、平均点の順位によって、学籍番号、名前、平均点を降順で表示させるプログラムを作りたいと思っています
コンパイル時にエラーメッセージが出ますが調べた結果これはエラーではなく警告だということがわかったので、そのまま実行しましたが、平均点は降順に表示されているものの学籍番号、名前がバラバラに表示されてしまいます。
発生している問題
1,Kongo 75.666664 2,Kirishima 75.000000 3,Myoukou 76.333336 4,Cyokai 80.000000 5,Atago 80.666664 6,Ashigara 76.000000 7,Maya 81.333336 8,Haguro 79.666664 平均点順にソートしました 順位 学籍番号 氏名 平均点 1:7,,81.333336 2:5,Kirishima,80.666664 3:4,Myoukou,80.000000 4:8,Cyokai,79.666664 5:3,Atago,76.333336 6:6,Ashigara,76.000000 7:1,Maya,75.666664 8:2,Haguro,75.000000
ファイルの読み込みはできているのですがソートすると1位の名前が表示されずさらに学籍番号と名前にズレが見られます
###エラーメッセージ
aaa.c:70:21: warning: incompatible pointer types passing 'char [8][128]' to parameter of type 'char (*)[20]' [-Wincompatible-pointer-types] bubblesort(s,NO,name,ga); ^~~~ aaa.c:27:53: note: passing argument to parameter 'str' here void bubblesort(float numbers[],int array_size,char str[][20],int ku[]) ^
該当のソースコード
c言語
1#include<stdio.h> 2#include<stdlib.h> 3#include<string.h> 4#define NO 8 5 6void irekaeno(float *x,float *y){ 7 float temp=*x; 8 *x=*y; 9 *y=temp; 10} 11 12void irekaeno2(int *x,int *y){ 13 int temp=*x; 14 *x=*y; 15 *y=temp; 16} 17 18void irekaena(char *sx,char *sy){ 19 char temp[20]; 20 21 strcpy(temp,sx); 22 strcpy(sx,sy); 23 strcpy(sy,temp); 24} 25 26 27void bubblesort(float numbers[],int array_size,char str[][20],int ku[]) 28{ 29 int i,j,temp; 30 31 for(i=0;i<(array_size-1);i++){ 32 for(j=(array_size-1);j>i;j--){ 33 if(numbers[j-1]<numbers[j]){ 34 irekaeno(&numbers[j-1],&numbers[j]); 35 irekaena(str[j-1],str[j]); 36 irekaeno2(&ku[j-1],&ku[j]); 37 } 38 } 39 } 40} 41 42int main(void){ 43 FILE *fp; 44 int i; 45 char str[20]; 46 float f1; 47 float f2; 48 float f3; 49 float f4; 50 float s[NO]; 51 int bc; 52 char name[NO][128]; 53 int ga[NO]; 54 fp = fopen("uuuo.txt","r"); 55 if(fp == NULL){ 56 printf("ファイルオープン失敗\n"); 57 return -1; 58 } 59 60 for(i=0;i<NO;i++){ 61 fscanf(fp, "%f,%127[^,],%f,%f,%f", &f1, str ,&f2, &f3, &f4); 62 63 s[i]=(f2+f3+f4)/3; 64 strcpy(name[i], str); 65 ga[i]=(f1); 66 printf("%d,%s %f\n",ga[i],name[i],s[i]); 67 68 } 69 70 bubblesort(s,NO,name,ga); 71 puts("平均点順にソートしました\n"); 72 puts("順位 学籍番号 氏名 平均点"); 73 for(i=0;i<NO;i++){ 74 printf("%d:%d,%s,%f\n",i+1,ga[i],name[i],s[i]); 75 } 76 77 78 79 return 0; 80 81 82 83 84}
###テキストファイル
1,Kongo,72,94,61
2,Kirishima,90,65,70
3,Myoukou,93,68,68
4,Cyokai,68,88,84
5,Atago,77,100,65
6,Ashigara,60,86,82
7,Maya,82,92,70
8,Haguro,83,92,64
###期待される出力値
1:7,maya,81.3
2:5,atago,80.6
3:cyokai,80
4:8,haguro,79.6
5:6,ashigara,78.6
6:3,myoukou,76.3
7:1,kongo,75.6
8:2,kirishima,75
補足情報(FW/ツールのバージョンなど)
mac
visual studio code
c言語
回答1件
あなたの回答
tips
プレビュー