構造体に値や名前を入力してそれを入力した値を基準に降順でソートをしたいです。
・エラーメッセージ
sorttest.c: In function ‘main’:
sorttest.c:48:15: warning: unknown conversion type character ‘-’ in format [-Wformat=]
scanf("%-10.10s" , &x[i].name);
^
sorttest.c:48:15: warning: too many arguments for format [-Wformat-extra-args]
・ソースファイル
/* qsort関数を用いて配列をソート */ #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char name[10]; /* 名前 */ int score; /* 得点 */ } player; /*--- person型オブジェクトの比較関数 ---*/ int wdcmp(const player *x, const player *y) { return (x->score < y->score ? 1 : x->score < y->score ? -1 : 0);/* 降順 */ } /*--- 一人分のデータを表示 ---*/ void print_player(player x) { printf("%-10.10s %dPoint\n", x.name, x.score); } /* 一人分の名前を表示 */ void print_name(player x) { printf("%-10.10s", x.name); } /* 一人分のスコアを表示 */ void print_score(player x) { printf("%dpoint\n",x.score); } int main(void) { int i; int a = 1; player x[3]; for(i = 0;i < 4; i++) { printf("名前を入力してください\n"); scanf("%-10.10s" , &x[i].name); printf("スコアを入力してください\n"); scanf("%d\n", &x[i].score); }; puts("ソート前"); for (i = 0; i < 4; i++) print_player(x[i]); /* 得点降順にソート */ qsort(x, 4, sizeof(player), (int(*)(const void*, const void*))wdcmp); puts("\n得点降順ソート後"); for (i = 0; i < 4; i++) { printf("%d ", a); print_name(x[i]); print_score(x[i]); a++; } return (0); }
構造体に予めデータを入れていたときは問題なく動作していたのですがデータを入力式にしたところ
名前を入力してください
kori
スコアを入力してください
名前を入力してください
スコアを入力してください
名前を入力してください
スコアを入力してください
名前を入力してください
スコアを入力してください
ソート前
0Point
0Point
@ 0Point
V�� 1046003606Point
得点降順ソート後
1 V�� 1046003606point
2 0point
3 0point
4 @ 0point
上記のようになってしまい、for文が機能はしているのですがscanfが機能していないです。原因も改善点もわからないのでアドバイスお願いします。
回答2件
あなたの回答
tips
プレビュー