【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.21910

構造体を使って、名前を入れ替えたいのですが・・・
投稿者---yam(2005/07/14 16:41:57)


構造体を使って、名前の入れ替えをしたいのですが、うまく入れ替わりません。
バブルソートを使ってやってみたのですが、うまくいきません。
作ったプログラムは、
#include<stdio.h>
#define string char name[80]

typedef struct{
char name[80];
int score;
}grade;
main(){
grade st[5];
int i=0,w;
char z[80];
st[0].name[80]="佐藤";
st[0].score=97;
st[1].name[80]="鈴木";
st[1].score=95;
st[2].name[80]="高橋";
st[2].score=100;
st[3].name[80]="山本";
st[3].score=99;
st[4].name[80]="渡辺";
st[4].score=97;

while(st[4].score!=100){
if(st[i].score>st[i+1].score){
w=st[i].score;
st[i].score=st[i+1].score;
st[i+1].score=w;

z[80]=st[i].name[80];
st[i].name[80]=st[i+1].name[80];
st[i+1].name[80]=z[80];
}
i++;
}
for(i=0;i<=5;i++){
printf("st[%d]:%s %d点\n",i,st[i].name,st[i].score);
}
}
です。名前の入力のところで、ポインタの型が合わないと出るのですが、よくわかりません。どこが悪いのかを教えてください。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:構造体を使って、名前を入れ替えたいのですが・・・ 21911 まきじ 2005/07/14 16:56:09
<子記事> Re:構造体を使って、名前を入れ替えたいのですが・・・ 21912 まきじ 2005/07/14 17:00:24


No.21911

Re:構造体を使って、名前を入れ替えたいのですが・・・
投稿者---まきじ(2005/07/14 16:56:09)


>名前の入力のところで、ポインタの型が合わないと出るのですが、

= 演算子で文字列を代入する事はできません。
strcpy() を使いましょう。


この投稿にコメントする

削除パスワード

No.21913

Re:構造体を使って、名前を入れ替えたいのですが・・・
投稿者---yam(2005/07/14 17:17:32)


お答えありがとうございます。
入力のところを
strcpy(st[0].name,"佐藤");
st[0].score=97;
strcpy(st[1].name,"鈴木");
st[1].score=95;
strcpy(st[2].name,"高橋");
st[2].score=100;
strcpy(st[3].name,"山本");
st[3].score=99;
strcpy(st[4].name,"渡辺");
st[4].score=97;
と変えたら、エラーはでなくなりました。
けれど、実行しても何も表示がされません。
どこが原因なのか教えてください。




この投稿にコメントする

削除パスワード

No.21914

Re:構造体を使って、名前を入れ替えたいのですが・・・
投稿者---まきじ(2005/07/14 17:22:13)


>けれど、実行しても何も表示がされません。

>while(st[4].score!=100)

st[4].score は 100 でないので、ループを抜ける事はない。


この投稿にコメントする

削除パスワード

No.21915

Re:構造体を使って、名前を入れ替えたいのですが・・・
投稿者---yam(2005/07/14 17:52:57)


少し変えて
while(st[5].score!='100'){
if(st[i].score>st[i+1].score){
st[5].score=st[i].score;
st[i].score=st[i+1].score;
st[i+1].score=st[5].score;

st[5].name[80]=st[i].name[80];
st[i].name[80]=st[i+1].name[80];
st[i+1].name[80]=st[5].name[80];
}
としてみたのですが、全く入れ替わりません。
これで問題はないと思うのですが、だめなのでしょうか?



この投稿にコメントする

削除パスワード

No.21916

Re:構造体を使って、名前を入れ替えたいのですが・・・
投稿者---まきじ(2005/07/14 18:04:05)


>while(st[5].score!='100'){

バブルソートだから、st[i] と st[i+1] の比較を
N - 1 回繰り返せばよい。

>st[5].name[80]=st[i].name[80];
>st[i].name[80]=st[i+1].name[80];
>st[i+1].name[80]=st[5].name[80];

入れ替え部分も、strcpy() を使いましょう。


この投稿にコメントする

削除パスワード

No.21917

Re:構造体を使って、名前を入れ替えたいのですが・・・
投稿者---yam(2005/07/14 18:14:56)


名前の入れ替え部分のstrcpyの使い方がよくわからないのですが、
strcpy(z[80],st[i]."name[80]");
strcpy(st[i].name[80],"st[i+1].name[80]");
strcpy(st[i+1]."name[80],z[80]");
としてみましたが,
名前が入れ替わりませんでした。
正しい使い方を教えていただけるとありがたいです。




この投稿にコメントする

削除パスワード

No.21918

Re:構造体を使って、名前を入れ替えたいのですが・・・
投稿者---REE(2005/07/14 18:28:36)


>名前の入れ替え部分のstrcpyの使い方がよくわからないのですが、
>strcpy(z[80],st[i]."name[80]");
> strcpy(st[i].name[80],"st[i+1].name[80]");
> strcpy(st[i+1]."name[80],z[80]");
>としてみましたが,
>名前が入れ替わりませんでした。
>正しい使い方を教えていただけるとありがたいです。

これでコンパイルが通ったのですか?

上記から[80]と"を全て取り除いてください。



この投稿にコメントする

削除パスワード

No.21919

Re:構造体を使って、名前を入れ替えたいのですが・・・
投稿者---yam(2005/07/14 18:38:16)


[80]と"を取り除いたらうまくいきました。
色々とありがとうございました。
もっと勉強をしておきます。




この投稿にコメントする

削除パスワード

No.21920

Re:構造体を使って、名前を入れ替えたいのですが・・・
投稿者---nop(2005/07/14 18:39:30)


>名前の入れ替え部分のstrcpyの使い方がよくわからないのですが、

strcpy() の使用方法は変わりません。
構造体や名前の入れ替えの前に、
Cにおける文字列の扱いを勉強すべきです。


この投稿にコメントする

削除パスワード

No.21912

Re:構造体を使って、名前を入れ替えたいのですが・・・
投稿者---まきじ(2005/07/14 17:00:24)


というか

> st[0].name[80]="佐藤";
> st[0].score=97;
        :
        :
> st[4].name[80]="渡辺";
> st[4].score=97;

grade st[5]={{"佐藤",97},・・・,{"渡辺",97}};

の様に初期化すれば良いのでは?


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧