並び替えについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
黒猫

並び替えについて

#1

投稿記事 by 黒猫 » 15年前

買い物リストを作っているのですが、
商品名と値段を入力して、値段の高い順、安い順にソートするものです。
値段のソートはできたのですが、商品名もつけて並び変えたいのですが、
文字化けしてしまいます。ご指摘お願いします。

#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);
}
}
}

toyo

Re:並び替えについて

#2

投稿記事 by toyo » 15年前

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;
にしたほうが見やすいしバグも起こりにくいですよ
構造体のメンバー個々で代入しなくても同じ構造体同士はそのまま代入できます

黒猫

Re:並び替えについて

#3

投稿記事 by 黒猫 » 15年前

なるほど!!

ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る