買い物リストを作っているのですが、
商品名と値段を入力して、値段の高い順、安い順にソートするものです。
値段のソートはできたのですが、商品名もつけて並び変えたいのですが、
文字化けしてしまいます。ご指摘お願いします。
#include <stdio.h>
void main(void){
struct shopping{
unsigned long p;
unsigned char sp[20];
}list[10];
int i = 0;
int a, j, order;
unsigned char dumySP[20];
unsigned long dumyP;
for(i = 0; i < 3; i++){
printf("買い物:");
scanf("%s", &list.sp);
printf("値段:");
scanf("%lu",&list.p);
}
/*//////////////////昇順ソート////////////////*/
if(order == 1){
for(i = 0; i < 3; i++){
for(j = i+1; j < 3; j++){
if(list.p < list[j].p){
dumyP = list.p;
for(a = 0; a == '\0'; a++){
dumySP[a] = list.sp[a];
printf("1%c\n", dumySP[a]);
}
list.p = list[j].p;
for(a = 0; a == '\0'; a++){
list.sp[a] = list[j].sp[a];
printf("2%c\n", list.sp[a]);
}
list[j].p = dumyP;
for(a = 0; a == '\0'; a++){
list[j].sp[a] = dumySP[a];
printf("3%c\n", list[j].sp[a]);
}
}
}
}
for(i = 0; i < 3; i++){
printf("\t\t%s \t\t\t%lu\n",list.sp, list.p);
}
}
}
並び替えについて
Re:並び替えについて
for(a = 0; a == '\0'; a++){
は
for(a = 0; list.sp[a] != '\0'; a++){
が正しいです(後2箇所も同様)
また文字列のコピーならstrcpy( )使ったほうが楽です
しかし
unsigned char dumySP[20];
unsigned long dumyP;
ではなくて
struct shopping dummy;
にして
dummy = list;
list = list[j];
list[j] = dummy;
にしたほうが見やすいしバグも起こりにくいですよ
構造体のメンバー個々で代入しなくても同じ構造体同士はそのまま代入できます
は
for(a = 0; list.sp[a] != '\0'; a++){
が正しいです(後2箇所も同様)
また文字列のコピーならstrcpy( )使ったほうが楽です
しかし
unsigned char dumySP[20];
unsigned long dumyP;
ではなくて
struct shopping dummy;
にして
dummy = list;
list = list[j];
list[j] = dummy;
にしたほうが見やすいしバグも起こりにくいですよ
構造体のメンバー個々で代入しなくても同じ構造体同士はそのまま代入できます