下記のようなエラーがでて、構造体同士の比較はどのようにしたらいいのかわかりません。
エラー: 二項演算子 < への無効な被演算子です (‘record_t {aka struct <無名>}’ と ‘record_t {aka struct <無名>}’)
if(min < a[i]){
yamada 22 160.5
yamamoto 22 177.4
suzuki 21 165.3
tanaka 20 170.0
nakamura 22 179.7
nakamura 21 175.3
と入力したら、
tanaka 20 170.00
suzuki 21 165.30
nakamura 21 175.30
yamada 22 160.50
yamamoto 22 177.40
nakamura 22 179.70
と表示するようにしたい。
c
1#include<stdio.h> 2#include<string.h> 3#include "str_sort.h" 4 5void srt_sort(int n, record_t *a){ 6 7 int i, j, k; 8 record_t min; 9 10 for(k = 0; k <= n - 2; k++){ 11 12 for(i = k, j = k, min = a[k]; i < n; i++){ 13 14 if(min < a[i]){ 15 16 min = a[i]; 17 18 j = i; 19 } 20 } 21 22 min = a[k]; 23 a[k] = a[j]; 24 a[j] = min; 25 } 26} 27
str_sort.hファイル↓
c
1#define STRLEN 63 2#define STRFMT "%63s" 3void string_sort(int n, char (*a)[STRLEN+1]); 4 5 6main.cファイル↓ 7```c 8#include <stdio.h> 9#include <string.h> 10#include <assert.h> 11#include "str_sort.h" 12#define MAX_N 64 13 14 15int str_array_scan(record_t a[]) 16{ 17 int i; 18 int n; 19 fprintf(stderr, "n = "); 20 scanf("%d",&n); 21 assert(n<=MAX_N); 22 for (i=0; i<n; i++) { 23 fprintf(stderr, "[%d].name : ", i); 24 scanf(STRFMT, a[i].name); 25 fprintf(stderr, "[%d].age : ", i); 26 scanf("%d", &a[i].age); 27 fprintf(stderr, "[%d].height : ", i); 28 scanf("%lf", &a[i].height); 29 } 30 return n; 31} 32 33 34void str_array_print(int n, record_t a[]) 35{ 36 int i; 37 for (i=0; i<n; i++) { 38 printf("%-10s", a[i].name); 39 printf("%3d", a[i].age); 40 printf("%7.2f", a[i].height); 41 printf("\n"); 42 } 43} 44 45 46int main(void) 47{ 48 int n; 49 record_t a[MAX_N]; 50 51 n = str_array_scan(a); 52 str_sort(n, a); 53 str_array_print(n, a); 54 55 return 0; 56}
回答3件
あなたの回答
tips
プレビュー