C言語関係掲示板

過去ログ

No.1213 while(cin.get(c)) の構造

[戻る] [ホームページ]
No.15998

文字の読み込み
投稿者---けん(2004/07/29 19:29:45)


int main(void)
{
char c;
while(cin.get(c)){
cout<<c;
}
return(0);
}
これは文字を一文字読み込んで評価すると書いてありました。
しかし、たとえば入力がasdfgだとすると、出力もasdfになります。
このasdfは4文字なんですけど、このプログラムはいったいどういう
構造になっているんですか?


No.15999

Re:文字の読み込み
投稿者---けん(2004/07/29 19:30:46)


>int main(void)
すいません、間違えました
>{
> char c;
> while(cin.get(c)){
> cout<<c;
> }
> return(0);
>}
>これは文字を一文字読み込んで評価すると書いてありました。
>しかし、たとえば入力がasdfgだとすると、出力もasdfgになります。
>このasdfgは5文字なんですけど、このプログラムはいったいどういう
>構造になっているんですか?



No.16000

Re:文字の読み込み
投稿者---シャノン(2004/07/29 20:21:19)


>>int main(void)
>すいません、間違えました
>>{
>> char c; // データを格納する変数
>> while(cin.get(c)){ // コンソールから一文字読む
>> cout<<c; // 読んだ文字列を書き出す
>> }
>> return(0);
>>}
>>これは文字を一文字読み込んで評価すると書いてありました。
>>しかし、たとえば入力がasdfgだとすると、出力もasdfgになります。
>>このasdfgは5文字なんですけど、このプログラムはいったいどういう
>>構造になっているんですか?

という構造です。


No.16002

Re:文字の読み込み
投稿者---aki(2004/07/29 21:06:59)


#include <iostream>

using namespace std;

int main()
{
    char c;

    while (cin.get(c)) {
        cout << c;
    }
    return 0;
}

(1) cin.get(c) は cin から c に1文字だけを読み込みます。

(2) もし読み込みに成功すれば、while の条件部は真となり、ループ本体の
    cout << c; が実行されます。すなわちその1文字が cout に出力されま
    す。そして (1) に戻ります。

    読み込みに失敗した場合 cin.get(c) は偽となります。したがって while
    ループを抜けてプログラムは終了します。


大雑把に説明するとこんな感じですが、このプログラムをきちんと理解するのは
結構大変です。このプログラムに asdfg という5文字の入力を与えると while
ループの本体が5回実行されるわけです。