アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。AOJの問題を解いていて、
while( scanf("%s", s)) != EOF){
...
}
 というコードを書いたのですが、私の環境(gcc)ではエンターキーを押した後も入力画面が表示されたままで、while文の中に書いた出力処理が表示されないのですが、いざ提出してみると通って、結果もちゃんと表示されていました。
 どうなっているのか分かりません。AOJ側のコンパイラとこちらのgccコンパイラには違いがあるのか、他に何か要因があるのか、教えていただけるとありがたいです。

質問者からの補足コメント

  • int a, b;
    top = 0;
    char s[100];
    while(scanf("%s", s) != EOF){
    if( s[0] == '+'){
    a = pop();
    b = pop();
    push(a + b);
    } else if( s[0] == '-'){
    b = pop();
    a = pop();
    push(a - b);
    } else if( s[0] == '*'){
    a = pop();
    b = pop();
    push(a * b);
    } else{
    push(atoi(s));
    }
    }
    ALDS_1_3_Aの問題、gcc(linux,win),VC++共に同挙動。全文は文字数の関係上補足不可。

      補足日時:2018/02/22 17:04
  • 上記の補足のコードの中で使われているpop、push関数はSTLのstackに実装されているものと同じようなものです。(簡略化されてはいますが)
    見づらくてごめんなさい。もっときれいに載せられないものか...。

      補足日時:2018/02/22 17:07

A 回答 (4件)

「while文の中に書いた出力処理」と「while文を抜けたのちに出力する」とは全然意味が違うから「説明が不足」じゃないんだけどね....



さておき, while の条件が
scanf("%s", s) != EOF
となっているのだから, 当然「scanf が EOF を返したとき」に while から抜け出すことになります. さて, scanf はどのようなときに EOF を返すでしょうか.
    • good
    • 0

その「while文の中」に, そもそも「出力処理」が見つからないんですけど....

    • good
    • 0
この回答へのお礼

while文を抜けたのちに出力する、という意味でした。ループを抜けることができないために出力がなされない、ということです。
説明が不足し、申し訳ありません。

お礼日時:2018/02/22 17:24

これ, できればプログラム全体を見たい....



あと, 統合環境で実行するときとコマンドラインから実行するときとで挙動が変化する可能性も無きにしも非ずだったりするわけですが, その辺はどうなんでしょうか.
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
補足としてコードの一部を上げさせていただきました。よろしければご覧ください。見づらくてごめんなさい。

お礼日時:2018/02/22 17:08

恐らく(というか十中八九確実に)ですが、AOJ 側では入力データをファイルとして用意していて、そのファイルをリダイレクトでコンパイル結果に食わせています。

そして、出力もリダイレクトしてファイル化し、これもまたファイルとして用意した正解の出力と比較して出力結果のチェックとしています。でなければ、24 時間ひっきりなしに到着する答案提出に対応できるわけがありません。

「エンターキーを押した」と書かれていることからあなたは入力を手入力で行ったと思われますが、ひょっとしたら手入力・画面出力とリダイレクト入出力との違いで何かが違うのかもしれません。

あと、あなたは gcc を利用されたと書いていますが、OS は何を使用してますか?
あなたが遭遇した現象は OS のキーボードからの入力の扱いの違いも絡んでいるようにも見えます。
    • good
    • 0
この回答へのお礼

入力方法に原因があるのか...。
Linuxで書いたのですが、気になったのでWindows(VC++)でも試してみて、同じ結果でした。ちなみに、コードの入力処理の部分を少し書き換えると手入力でも出力がなされました。ここに何か違いがあるようです。
回答、ありがとうございました。

お礼日時:2018/02/22 07:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!