dポイントプレゼントキャンペーン実施中!

#include <stdio.h>

int main()
{
int c;

while((c=getchar()) != EOF)
printf("'%1c' -- %2x\n", c,c);

return 0;
}

で行頭にCtrl + Z + リターンを入力するとwhile文を抜けられるのですが、
文字入力の途中でCtrl + Z + リターンを入力するとCtrl + Z が0x1aと認識されて
while文を抜けられないようなのですが、上の文を入力がEOFまたは0x1aでwhile文を
抜けられるようにしたいのですが、どのような記述にすれば良いのでしょうか?

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

  • c=getchar()
    while (c != EOF && c != 0x1a)



    while((c = getchar()) != EOF && c != 0x1a)

    と書いた時の違いってどのようになるのでしょうか?

      補足日時:2016/02/01 16:53

A 回答 (2件)

「入力がEOFまたは0x1aでwhile文を抜けられるようにしたい」というだけなら, 素直に while の条件を


(c = getchar()) != EOF && c != 0x1a
とすればいいだけじゃないのかなぁ. 何が疑問なんだろ.

あ, ちなみに「行頭じゃないと C-Z が EOF にならない」というのは仕様らしいね.
    • good
    • 0
この回答へのお礼

変な所で嵌ってしまいました。

お礼日時:2016/02/01 21:55

> と書いた時の違いってどのようになるのでしょうか?



後者は、ループの先頭でgetchar()します。

前者は、ループに入る前にgetchar()します。
while((c = getchar()) != EOF && c != 0x1a)と同じ機能を前者の方式でやるためには、

c=getchar();
while (c != EOF && c != 0x1a){
 printf("'%1c' -- %2x\n", c,c);
 c=getchar();
}

と、ループの末尾でもgetchar()する必要があります。
    • good
    • 0
この回答へのお礼

詳しい説明ありがとうございました。

お礼日時:2016/02/01 21:50

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