下記のようなエラーがでて、構造体同士の比較はどのようにしたらいいのかわかりません。
エラー: 二項演算子 < への無効な被演算子です (‘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}
そのコードを提示しましょう
環境(OS,コンパイラ等)とソースを提示して下さい。
〉構造体同士の比較はどのようにしたらいいのかわかりません。・・・これだけでは何を比較するのか分かりません。
どう比較したいのか? "<" を使っているので大小(とか昇順・降順)関係でしょうか? いずれにせよ意図が分からないので、コードをご提示ください。
すいません、コードの追加をさせていただきました。
str_sort.hの中身が分かりませんが?
・・・最低限(エラーが出てもいいけど)コンパイルできるソースを上げて下さい。
if(min < a[i])は出来ません。構造体の中のなにを比較するか?
比較関数が必要だと思いますよ。
構造体は、パディング(詰物)↓が変数の間に入るので、memcmp()などは使えません。
https://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0%E3%82%A2%E3%83%A9%E3%82%A4%E3%83%A1%E3%83%B3%E3%83%88
このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
回答3件
あなたの回答
tips
プレビュー