C言語で名前、身長、視力を入力させて一覧表と視力の分布表を求めるプログラムを作っています。
一覧表を作成するところまでは上手くいっているのですが、視力の分布がどうしても期待した動作になってくれません。
###コード
c
1#include<stdio.h> 2#include<string.h> 3 4#define VMAX 21 5 6typedef struct { 7 char name[20]; 8 int height; 9 double visual; 10}Physical; 11 12 13int input(Physical a[]); 14int output(Physical a[],int n); 15int distribution(Physical a[], int n); 16 17 18 19 20int main(void) 21{ 22 Physical x[30]; //30人のPhysical型の構造体の配列 23 24 int number = input(x); //入力関数 25 26 output(x, number); //出力関数 27 28 distribution(x, number); 29 30 return 0; 31} 32 33 34//入力関数 35int input(Physical a[]) 36{ 37 int n = 0; //人数 38 int i; 39 char exit[] = "exit"; 40 41 //exitと入力されたらループを終了する 42 for (i = 0;; i++) { 43 printf("%3d人目 名前(終了時はexitと入力) : ", i + 1); scanf_s("%s", a[i].name,20); 44 if (strcmp(a[i].name, exit) == 0) break; //ループ終了 45 46 printf(" 身長 : "); scanf_s("%d", &a[i].height); 47 printf(" 視力 : "); scanf_s("%lf", &a[i].visual); 48 49 n++; 50 51 printf("\n"); 52 } 53 54 return n; 55 56} 57 58 59//出力関数 60int output(Physical a[], int n) 61{ 62 int i; 63 64 printf("\n\n"); 65 printf(" 身体検査一覧表\n"); 66 printf("\n"); 67 printf("+----------------------------------------------+\n"); 68 printf("| 番号 | 氏名 | 身長 | 視力 |\n"); 69 printf("+----------------------------------------------+\n"); 70 71 for (i = 0; i < n; i++){ 72 printf("| No.%-2d | %-20.18s | %3d |%5.1f |\n", i + 1, a[i].name, a[i].height, a[i].visual); 73 } 74 75 printf("+----------------------------------------------+\n"); 76 77 return 0; 78} 79 80int distribution(Physical a[], int n) 81{ 82 int visual10; 83 double visual1; 84 int visuallist[VMAX]; 85 int i; 86 87 88 //visuallistの配列要素を全て0にする 89 for (i = 0; i < VMAX; i++) 90 visuallist[i] = 0; 91 92 for (i = 0; i < n; i++) { 93 if (a[i].visual >= 0.0&&a[i].visual <= VMAX / 10.0) 94 visuallist[(int)(a[i].visual * 10)]++; 95 } 96 97 printf("視力の分布\n"); 98 99 for (visual10 = 0; visual10 < VMAX; visual10++) { 100 visual1 = (double)(visual10 + 1) / 10; 101 printf("%3.1f~ : %d人\n", visual1, visuallist[i]); 102 } 103 104 return 0; 105}
###コンパイラ
コンパイラで、
1人目 名前(終了時はexitと入力) : Tadao
身長 : 162 視力 : 0.3
2人目 名前(終了時はexitと入力) : Tomiaki
身長 : 173 視力 : 0.7
3人目 名前(終了時はexitと入力) : Syouji
身長 : 175 視力 : 2.0
4人目 名前(終了時はexitと入力) : exit
と入力すると、視力の分布表は
視力の分布
0.1~ : 1人
0.2~ : 1人
0.3~ : 1人
0.4~ : 1人
0.5~ : 1人
0.6~ : 1人
0.7~ : 1人
0.8~ : 1人
0.9~ : 1人
1.0~ : 1人
1.1~ : 1人
1.2~ : 1人
1.3~ : 1人
1.4~ : 1人
1.5~ : 1人
1.6~ : 1人
1.7~ : 1人
1.8~ : 1人
1.9~ : 1人
2.0~ : 1人
2.1~ : 1人
と出力してしまいます。
正しく分布表を作るにはどのような点を改善すればいいのかどなたか教えていただけないでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/29 05:02
2019/06/29 05:17