生徒の名前、点数、順位を表示するプログラムをつくりたいのですが、(下のような関数を用いることを前提として)
void rank1(struct data *x,int n)
{
int i,j;
for(i=0;i<n;i++)
x[i].rank=1;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(x[i].score<x[j].score)
x[i].rank++;
}
このような場合、関数の引数として、構造体が用いられているわけですよね?
引数が構造体の場合、どのように引数の部分を書けばいいのか分かりません。
私が考えたプログラムは下記の通りです。
もちろんうまくいきませんでした。
たぶん最後のprintfの所のrank1の引数が間違っているだけだと思うんですが、どうでしょうか?
include<stdio.h>
struct data {
char name;
int score;
int rank;
};
void rank1(struct data *x,int n)
{
int i,j;
for(i=0;i<n;i++)
x[i].rank=1;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(x[i].score<x[j].score)
x[i].rank++;
}
void main(void)
{
int m;
static struct data x[] = {{'A',56,1},
{'B',79,1},
{'C',34,1},
{'D',91,1},
{'E',69,1}};
for(m=0;m<5;m++)
printf("%c君 %d点 %d位\n",x[m].name,x[m].score,rank1(x,m));
}
No.3ベストアンサー
- 回答日時:
>としたにもかかわらず、下のようにプリントするときはrankに1がつかないのでしょうか?
まず、rank1は関数名、rankはstruct data構造体のメンバ変数名です。
全然別のものです。
rank1関数は、struct data構造体の配列を調べてメンバ変数rankに順位を入れます。
printfで表示するのは、このメンバ変数を表示しなければなりません。
つまり、printfの引数は x[m].rank です。
No.2
- 回答日時:
まずrank1()関数を実行して値をセットアップし、printf()関数では値を取り出すだけにするということです。
printf("%c君 %d点 %d位\n",x[m].name,x[m].score,rank1(x,m));
この文がおかしいんです。なぜprintf()関数の中でrank1()関数を実行しているんですか?値が返る関数ならまだしもこれはvoid関数になっていますよ。
"%d位"に入れたいのは struct dataのint rankなんでしょう?
No.1
- 回答日時:
for(m=0;m<5;m++)
printf("%c君 %d点 %d位\n",x[m].name,x[m].score,rank1(x,m));
ではなくて、
rank1(x,5);
for(m=0;m<5;m++)
printf("%c君 %d点 %d位\n",x[m].name,x[m].score,x[m].rank);
でしょうね。
この回答への補足
ちゃんと実行できました。ありがとうございます。
1つ質問があるんですが、
>rank1(x,5);
というrankを定義することをしていなかったのと、x[m].rankというように、rankもメンバの1つのように書けばいいということは分かったんですが、どうして
void rank1(struct data *x,int n)
としたにもかかわらず、下のようにプリントするときはrankに1がつかないのでしょうか?
>for(m=0;m<5;m++)
>printf("%c君 %d点 %d位\n",x[m].name,x[m].score,x[m].rank);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
printf で二進表示を行いたい。
-
コマンドプロンプトがすぐ消える
-
C言語で四則演算を使って結果が...
-
CTRL+Dでループを抜けるには
-
switch分のケースを範囲数?に...
-
文字と数字の判定について
-
unsigned int型について
-
C言語で、「自然数nを入力し、n...
-
getcharの連続について
-
入力したお金の金額からお札の...
-
8人分のテストの点数を入力し、...
-
int型 00 を表示するのに0とな...
-
C言語で 選択肢: |?| |?| |?| 1...
-
数当てゲームを作っているのですが
-
【プログラム】2の倍数で表示非...
-
アドレスの比較について
-
C言語プログラミングで「コマン...
-
C言語の数値入力
-
改行について 1行に何個かづ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
printf( " %2d", p * q );
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
cshの文字列操作(0埋め)
-
万年カレンダーのC言語プログラ...
-
コマンドラインに出力した文字...
-
scanfに文字が入力されたときに...
-
ホームページをC言語で作りたい...
-
改行について 1行に何個かづ...
-
コンパイルエラーについて
-
台形の面積を求めるプログラム
-
なぜgccはstdio.hをインクルー...
おすすめ情報