ここから本文です

c言語の質問です 『名前 点数』名前と点数を空白を入れてキーボードから入力し、 ...

mam********さん

2020/5/2811:43:53

c言語の質問です
『名前 点数』名前と点数を空白を入れてキーボードから入力し、
名前1 点数1
名前2 点数2
と入力していき、入力の最後に C-d を入力します。

その後、点数が1位の人の名前を一行目、2位の人の名前を2行目にそれぞれ1行ずつ書き出すプログラムを作りたいです。
このプログラムの作り方を教えていただきたいです。

閲覧数:
10
回答数:
1
お礼:
250枚

違反報告

回答

1〜1件/1件中

Hermitさん

2020/5/2817:19:15

こんなんかな・・・
同点が二人以上いた場合は考慮していない。

#include<stdio.h>
struct rank {
    int n;
    char s[64];
} rank[3];
void ranksort3(struct rank r[3])
{
    if (r[2].n > r[0].n) {
        r[1] = r[0];
        r[0] = r[2];
    } else if (r[2].n > r[1].n)
        r[1] = r[2];
}
struct rank mkst(char *s)
{
    struct rank ret = { -1, "" };
    sscanf(s, "%s%d", &ret.s, &ret.n);
    return ret;
}

int main()
{
    if (fgets(rank[2].s, sizeof rank[2].s, stdin)) {
        rank[0] = mkst(rank[2].s);
        if (fgets(rank[2].s, sizeof rank[2].s, stdin)) {
            rank[1] = rank[2] = mkst(rank[2].s);
            ranksort3(rank);
            while (fgets(rank[2].s, sizeof rank[2].s, stdin)) {
                rank[2] = mkst(rank[2].s);
                ranksort3(rank);
            }
            printf("%s\n%s\n", rank[0].s, rank[1].s);
        }
    }
    return 0;
}

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる