←検索窓の楽しみ方
  ショッピングモール  掲示板ランキング


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.4131

getcharについて
投稿者---ryota(2005/06/30 22:30:37)


getcharで文字列を入力をした場合どうなるんですか???


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:getcharについて 4132 おでん 2005/06/30 22:34:30
<子記事> Re:getcharについて 4133 まきじ 2005/06/30 22:47:55


No.4132

Re:getcharについて
投稿者---おでん(2005/06/30 22:34:30)


>getcharで文字列を入力をした場合どうなるんですか???

まず自分で解決する努力をしましょう。
googleで検索したら、1万件近いサイトがありますよ。


この投稿にコメントする

削除パスワード

No.4133

Re:getcharについて
投稿者---まきじ(2005/06/30 22:47:55)


>getcharで文字列を入力をした場合どうなるんですか???

1 文字ずつ(入力)して、配列に格納していくプログラムなら
作れますか?


この投稿にコメントする

削除パスワード

No.4134

Re:getcharについて
投稿者---ryota(2005/06/30 22:58:37)


>>getcharで文字列を入力をした場合どうなるんですか???
>
>1 文字ずつ(入力)して、配列に格納していくプログラムなら
>作れますか?

作れます。その場合for文やwhile文を使ってつかえばいいと思うんですが、その場合1文字づつじゃなくて文字列を入力すると、後ろの格納スペースに文字列が入りますよね?もしかしてgetchar関数の場合も格納スペースがあらかじめ用意してあって、文字列を入力するとちゃんと入るってことですか?



この投稿にコメントする

削除パスワード

No.4135

Re:getcharについて
投稿者---まきじ(2005/06/30 23:07:02)


意味が解らない・・
そのプログラムで、文字列を入力して表示してみて下さい。

#'\0' が入ってないので、余計な文字まで表示されると思いますが。


この投稿にコメントする

削除パスワード

No.4136

Re:getcharについて
投稿者---ryota(2005/06/30 23:12:01)


すいません。ちょっと説明しづらいです。
結果的にgetcharに文字列を入力するとどーなるんですか?


この投稿にコメントする

削除パスワード

No.4137

Re:getcharについて
投稿者---まきじ(2005/06/30 23:15:40)


>結果的にgetcharに文字列を入力するとどーなるんですか?

聞かなくても、やってみれば解ることだと思いますよ?


この投稿にコメントする

削除パスワード

No.4138

Re:getcharについて
投稿者---RiSK(2005/06/30 23:20:10)


>結果的にgetcharに文字列を入力するとどーなるんですか?

ストリームと呼ばれるバッファに行単位(\nまで)で
バッファリングされます。

c = getchar(); において

ABC(改行)

と入力すると c には 'A' が入り,
残りの bc(改行) はバッファに残ります。

次に getchar や scanf などが呼ばれると
バッファから bc(改行) が取り出され,
あたかも自動的に bc(改行) が入力されたかのように見えます。

# あなたの疑問はもっともです。
# ストリームをまともに説明している
# 初心者向けの本は,見たこと無い


この投稿にコメントする

削除パスワード

No.4140

Re:getcharについて
投稿者---RiSK(2005/06/30 23:25:32)


ごめん。途中で小文字になってた。

×bc(改行)
○BC(改行)


この投稿にコメントする

削除パスワード

No.4139

Re:getcharについて
投稿者---RiSK(2005/06/30 23:23:07)


>1文字づつじゃなくて文字列を入力すると、後ろの格納スペースに文字列が入りますよね?もしかしてgetchar関数の場合も格納スペースがあらかじめ用意してあって、文字列を入力するとちゃんと入るってことですか?

いい線行ってます。
あなたの言う「格納スペース」をストリームと呼びます。


この投稿にコメントする

削除パスワード

No.4141

Re:getcharについて
投稿者---ryota(2005/06/30 23:42:24)


>いい線行ってます。
>あなたの言う「格納スペース」をストリームと呼びます。

/*** getchar,c ***/
#include <stdio.h>

int main( void )
{
    int ch;

    while ( ( ch = getchar( ) ) != EOF ) {
        putchar(ch);
    }
    return 0;
}


ありがとうございます。実はこのサイトの演習で、このプログラムの部分に疑問をもって質問してたんですが、これを実行するとgetcharに文字列をいれてputcharでちゃんと文字列を出力してくれるんですよね。chには一文字しか入ってないはずなのに、なんでちゃんと出力するんですかね???



この投稿にコメントする

削除パスワード

No.4142

Re:getcharについて
投稿者---まきじ(2005/07/01 00:06:28)


>chには一文字しか入ってないはずなのに、なんでちゃんと出力するんですかね???

RiSK さんも仰ってたましたが。

getchar() で、"HogeHoge" と入力すると、バッファに
"HogeHoge" と格納されます。
で、getchar() は、1 文字しか返さないので、バッファより
'H' が返されます。
この時、バッファには"ogeHoge"と残ってるので、
以降の getchar()で、'o' 'g' ・・・'e' と 1 文字ずつ
順に、返されるという事です。


この投稿にコメントする

削除パスワード

No.4144

Re:getcharについて
投稿者---RiSK(2005/07/01 00:33:12)


No.4138ですでに説明しました。
不十分ならふさわしい引用をして,具体的に質問してください。

どうしても分からないなら,デバッガを使って
007行目で複数の文字を入力し,
007-008行目をステップ実行してみることをお勧めします。

  1. ストリームが空なので getchar で入力待ち
  2. コンソールから AB(改行) と入力
    入力ストリーム AB(改行)
  3. getchar はストリーム先頭の一文字 'A' を取り出す
    入力ストリーム B(改行)
  4. putchar で出力ストリームに 'A' を出力
    出力ストリーム A
  5. ループ
  6. getchar で入力ストリームから 'B' を取り出す
    (このとき手入力は無し。自動的にストリームから取り出されます)
    入力ストリーム (改行)
  7. putchar で出力ストリームに 'B' を出力
    出力ストリーム AB
  8. ループ
  9. getchar で入力ストリームから '\n' を取り出す
    (このとき手入力は無し。自動的にストリームから取り出されます)
    入力ストリーム (空)
  10. putchar で出力ストリームに '\n' を出力
    出力ストリーム AB(改行)
    この段階で AB(改行) が表示(フラッシュ)される
  11. ストリームが空なので getchar で入力待ち
  12. 以下繰り返し



この投稿にコメントする

削除パスワード

No.4145

Re:getcharについて
投稿者---ryota(2005/07/01 00:40:45)


すでに出てたんですね。
詳しく理解させて頂き、ものすごく気分がいいです!!
RiSKさん、まきじさん詳しい説明ありがとうございました。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity