質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

  • C++

    3787questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

C++、構造体の書き換え

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 294

haniwa-0000

score 3

二つの整数の和と差を求めるプログラムを構造体を用いて書く方法を教えてください。

#include <stdio.h>

void sum_diff(int n1, int n2, int *sum, int *diff)
{
    *sum  = n1 + n2;
    *diff = (n1 > n2) ? n1 - n2 : n2 - n1;
}

int main(void)
{
    int na, nb;
    int wa = 0, sa = 0;

    puts("二つの整数を入力してください。");
    printf("整数A:");    scanf("%d", &na);
    printf("整数B:");    scanf("%d", &nb);

    sum_diff(na, nb, &wa, &sa);

    printf("和は%dで差は%dです。\n", wa, sa);

    return 0;
}


これを構造体を用いたものに書き換えてほしいです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2018/07/06 13:28

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 3

checkベストアンサー

+1

質問が抽象的だったので細かい注文はわからないですが

#include <stdio.h>
struct sum_diff{
    int n1;
    int n2;
    int sum;
    int diff;
};

int main(void){
    int na, nb;
    struct sum_diff test;
    printf("整数A:");
    test.n1 = scanf("%d", &na);
    printf("整数B:");
    test.n2 = scanf("%d", &nb);
    test.sum = na + nb;
    test.diff = (na > nb) ? na - nb : nb - na;
    printf("和は%dで差は%dです。\n", test.sum, test.diff);
}

こんな感じになるかと。
struct 関数名{};←セミコロンを忘れずに!

上記の通りで構造体を宣言します。

構造体のなかで宣言したものをメンバと言います。

また構造体のメンバは、実体からドット演算子「.」を使って呼び出します。

詳しいことはこのサイトをご覧ください。
https://www.sejuku.net/blog/24473#struct

あと他の方もおっしゃっていますが、質問をする際の心がけること、回答してくれる方に対してできるだけ具体的に質問内容を説明するのはルールかと思います。丸投げは持っての他です。

自分自身もこのサイトを使い始めたばかりなのでまだ至らぬ点もありますが、指摘・アドバイスしていただいたことはしっかり訂正や修正をしてこのサイトの環境に慣れようと心がけています。ですのでhaniwa-0000さんも心がけていただけると幸いです。長文失礼しました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/05 03:00

    横から失礼します。気になる点が二か所。
    ・ scanfがどんな値を返すのか、ググって確認された方が良いです。
    ・ これは明らかに変ですね ⇒『struct 関数名{};』

    構造体の使い方についてももうちょっと洗練できる気がしますが、こればっかりは質問があまりに曖昧なので判断のしようがないですね。

    キャンセル

  • 2018/07/07 15:43

    ご回答ありがとうございます。
    つい先日構造体を習ったばかりで、構造体についてあまりよくわからないまま質問してしまいました。申し訳ありません。
    もう少し自分で調べて身につけてから質問するべきだったと反省しています。
    ご指摘ありがとうございます。

    キャンセル

+1

回答ではありません・・・下記リンクを参考に質問して下さい。
質問する時は・・・

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

こんにちは。

折角C++のタグがついてますので、少し無理やりC++らしくしてみました。

#include <iostream>
#include <boost/format.hpp>

struct SumDiff
{
private:
    int     n1;
    int     n2;
    int     sum;
    int     diff;
public:
    SumDiff(int i1, int i2) : n1(i1), n2(i2) { }
    void operator()()
    {
        sum = n1 + n2;
        diff = (n1 > n2) ? n1 - n2 : n2 - n1;
    }
    int getSum() const { return sum; }
    int getDiff() const { return diff; }
};

int main()
{
    int na, nb;

    std::cout << u8"二つの整数を入力してください。\n";
    std::cout << u8"整数A:";
    std::cin  >> na;
    std::cout << u8"整数B:";
    std::cin  >> nb;

    SumDiff sum_diff(na, nb);
    sum_diff();

    std::cout << boost::format("和は%dで差は%dです。\n") % sum_diff.getSum() % sum_diff.getDiff();
}


無駄に様々な機能を使ったので無駄に難しくなってしまいました。ご勘弁下さい。
wandboxで見ることができます。

あと、C++にはprintf()が無いのが辛い場合もあります。それっぽいことができるboost::formatは結構便利なので使ってみました。boostを実際に使うのはちょっとだけ手間がかかります。
Visual Studio
linux系OS

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/07 15:41

    ご回答ありがとうございます!
    最近プログラミングの勉強を始めたばかりで、恥ずかしながら基本もままならないので、私には少し難しく感じてしまいました。
    今後、もう少し勉強が進んできたら、
    このようなプログラムを自分で作成したり、読んだりできるようになりたいです。

    キャンセル

同じタグがついた質問を見る

  • C++

    3787questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。