@rimocon654 (T たか)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

C言語scanfの取り扱い

解決したいこと

scanf関連でつまっています。
二つの整数を読み込み、その2つの積が偶数か奇数か判定するプログラムを作っています。

発生している問題・エラー

出ているエラーメッセージを入力
../Main.c: In function ‘main’:
./Main.c:4:11: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
    4 |     (void)scanf("%d %d",&a,&b);
      |           ^~~~~~~~~~~~~~~~~~~~

該当するソースコード

#include <stdio.h>
int main(void){
    int a,b;
    scanf("%d %d",&a,&b);
    if((a*b)%2){
        printf("odd\n");
    }
    else
    {
        printf("Even\n");
    }
    return(0);

}

自分で試したこと

自分のPCの環境であるWSL、Ubuntuのgccコンパイラではコンパイルできます。しかしAtCoderのコンパイラでは上記のようにエラーがはかれます。一応 gcc -Wall -Wextraコマンドも試しましたが、それでもコンパイルが通ってしまいます。そこでGoogleに聞いたところこのエラーはscanfの返り値が無視された?とかが関係しているらしいので以下のコードに変更しましたがダメでした。

#include <stdio.h>
int main(void){
    int a,b,value;
    (void)scanf("%d %d",&a,&b);
    if((a*b)%2){
        printf("odd\n");
    }
    else
    {
        printf("Even\n");
    }
    return(0);

}
0 likes

3Answer

提出されたのはこちらでしょうか?

Warningはエラーではないのでコンパイルは通ります.また修正必須ではないので特に今回のような場合では無視して良いです.
WAとなっているのは,Oddではなくoddとなってしまっていることに起因するものです.

3Like

Comments

  1. @rimocon654

    Questioner

    気づいていませんでした。ご指摘いただきありがとうございます。
  2. 提出結果のところ,セット名がsampleの項は,出題されているページの入力例がどういう結果になったかを示してくれています.今回であれば
    AC×1
    WA×1
    ですね,出題されているページに用意されている2例のうち,いずれかがWAになっていることが考えられるという点から,結果の出力に差異がないか確認をしたほうが良いです.

    他にも,Odd <-> odd等の違いの他に YES <-> yes <-> Yes の3ケースがあったりするパターンもあるので,気をつけて回答されてください.最近は全てYes/Noに統一されていますが,過去問はYES/NOのパターンもよく見られます.

    ご健闘を祈ります.
  3. @rimocon654

    Questioner

    研究されてますね。注意深く回答していきます。ありがとうございます。
  4. コンパイルエラーが起きたらCE(Compile Error),実行時エラーが起きたらRE(Runtime Error)が出ますので,今回のようなWA(Wrong Answer)のみだけでなく,他の提出結果の種類を覚えておくのも大事かもしれません.あとよく見るのは実行時間超過のTLEぐらいですね.
    ぜひ頑張ってください.

英語が読めないとエラーや警告の意味がわからなくて対処ができないので英語の勉強も必要です。

出ている文の意味は scanfの返値を使っていない、つまりこのコードにはエラー処理が足りないよね、という警告です。

-Wunused-result
が(たぶん暗黙に)指定されているので、この警告が出ます。

エラーではなく警告なので、コンパイルは一応できているはずです。

この警告が出ないようにしたければ、きちんと返値をチェックするコードを書くか、さもなくば -Wno-unused-result オプションを使用することです。

下記のページも読んでみるといいです。

warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result - 簡潔なQ

2Like

Comments

  1. @rimocon654

    Questioner

    ご丁寧にありがとうございます。

まず出ているのはエラーではなく警告です。
そしてその箇所は提示のコードに無いようですが??
提示のコードとは違う別のコードをコンパイルしているのでは?

0Like

Comments

  1. @rimocon654

    Questioner

    いま書き直しました再度確認いただけますか?

Your answer might help someone💌