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

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

ただいまの
回答率

89.98%

プログラミングスキル測定サイトでの回答提出前のコード実行結果で不可解な点があります

解決済

回答 2

投稿

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

kurekure

score 11

お世話になっております。
とあるプログラミング測定サイトでの回答提出前のコード実行結果で
分からない点があるので質問することにしました。

具体的には、C言語での提出のときにprintfがあるかないかによって
結果の数値が変わってしまうという現象です。下にキャプチャした
画像を載せます。

71行目のprintf文をコメントアウトする前(一番下に4と出力されてる)
printf文をコメントアウトする前(一番下に4と出力されてる)

71行目のprintf文をコメントアウトしてコメントアウトする前と違う数値が出力されてる画面(7と出力されてる)
printf文をコメントアウトしてコメントアウトする前と違う数値が出力されてる画面(7と出力されてる)

71行目のprintf文をコメントアウトしているかしていないかの違い
だけですが、アウトプットされる数値が4から7へと変化してしま
います。
なぜこのような現象が起こるのか見当がつきませんが、どなたか
お分かりになる方いますでしょうか?
よろしくお願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • yohhoy

    2017/02/18 11:40 編集

    スクリーンショットではなく、コード全体を提示ください。誤った(=バグのある)C言語では稀にこのような事象が生じます。

    キャンセル

  • toutou

    2017/02/18 11:44

    そのサイト以外の自分の環境でやった場合などはどんな結果が出ました?

    キャンセル

  • kurekure

    2017/02/18 11:48

    https://paiza.jp/guide/kiyaku 規約で不特定多数の人が回答を閲覧可能にすることは違反になるようです。申し訳ありません。

    キャンセル

  • kurekure

    2017/02/18 11:53

    >toutou様 自分の環境(vs2008)で何個か実行したときは正しい出力が得られました。ただこのサイトで実行してるときの内部の問題が、どのような問題で処理しているかは分からないので、あくまで自分が作成した問題のみうまくいっているように見えるという段階です。

    キャンセル

回答 2

checkベストアンサー

+1

こんにちは。

何がアウトプットされるか分からないので確定的ではありませんが、もし、returnで返却する値がアウトプットされるのであれば、return文を実行していない(flagが1でない)のではないでしょうか?
printf()するとreturnした時と同じ状態にたまたま一致して、一見適切に動いているかのように見えることもあると思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/02/18 12:11

    回答ありがとうございます。

    >printf()するとreturnした時と同じ状態にたまたま一致して、一見適切に動いているかのように見えることもあると思います。

    コード全体は載せられないのですが、概要だけ説明しますと、
    printf("%d\n", func(M));
    でMを引数として関数funcを呼んでflagが1だったら
    if(flag==1) return aaa-1; //74行目
    しています。

    Chironianさんのおっしゃってる意味がよく分からないのですが、71行目のprintf文があるかないか
    だけで、printf("%d\n", func(M));で出力される値が4から7へと変わってしまうというのが、分か
    らない現象です。

    キャンセル

  • 2017/02/18 12:17 編集

    たぶん、掲示されいるコードはfunc()関数の一部なのですね?
    flagが1ならaaa-1が返却され、printf()が有る時はaaa=5なので、4が返却されてその4が表示されるように見えますね。

    しかし、もし、flagが1でなかった場合、何がreturnされるでしょうか?
    return sala;がコメントアウトされているので、不定値が返却される筈です。
    printf()がある時、その不定値がたまたま4になることを疑っています。

    キャンセル

  • 2017/02/18 13:03

    >たぶん、掲示されいるコードはfunc()関数の一部なのですね?

    はい、キャプチャ画像に載ってるコードはfunc()関数の一部です。

    >しかし、もし、flagが1でなかった場合、何がreturnされるでしょうか?
    >return sala;がコメントアウトされているので、不定値が返却される筈です。

    試しに、77行目のreturn sala;のコメントアウトを消して
    return aaa-1; //77行目
    で実行してみました。すると4が出力されて、サイト側の正解回答と一致しました。それで試しに、
    コードを提出してみると10問中8問正解で、残り2問はタイムオーバーで不正解でした。
    77行目を再びコメントして提出すると全問間違いでした。

    flagは70行目のaaa++;を繰り返していけばいつかは1になると勝手に思っていますし、自分の
    visual studio 2008の環境ではキャプチャ画像のコードでうまく動いているように見えます。
    仮にflagが1でなかった場合、確かに変な数値が返されるであろうということにはうなずけます。

    うーん、頭がこんがらがって何がなんだか分からないです。
    すみません、ちょっと昼食を食べてきます。

    キャンセル

+1

全体がないので想像になりますが、その一文だけでaaa2=4と5があると言うことは2回通ってるってことです。またそれとは別に4が出てるということは、参考にしてるところはそこではないということです。どこかの数字を変えて4の数字が変わるか見ていかないといけないのかも。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • ただいまの回答率 89.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる
  • トップ
  • Cに関する質問
  • プログラミングスキル測定サイトでの回答提出前のコード実行結果で不可解な点があります