新城@筑波大学情報です。こんにちは。

厳密には、このあたり、Unix の都合というか、ライブラリ関数の
都合だったりするんですよね。

In article <yu4fis9wqpqx.fsf@nature.tsukuba.ac.jp>
        Akira Otake <n0410272@nature.tsukuba.ac.jp> writes:
>    私はC言語を初めてまもないものです。今日はgetcharについておききしたく
>  て投稿します。今回私は仕事でまわされたアンケートをCで集計しようと思い、
>  ソースを書いていたのですが、うまく実行されませんでした。一文字入力して
>  エンターを押すと、行程が一つ跳んでしまうようです。

端末のモードの関係もあります。たとえば、端末で cat を動かし
て、abc リターン、123 リターン、Control-D と打つとこうなりま
す。

------------------------------------------------------------
% cat
abc
abc
123
123
% 
------------------------------------------------------------

でも、stty cbreak してからやると、こんな感じで動きが違ってき
ます。
------------------------------------------------------------
% stty cbreak; cat
aabbcc

112233

^D

^C
% 
------------------------------------------------------------

あ、Control-D 効かないなあ。Control-C で止めました。

最近は、tcsh とかシェルが端末の状態を変えるので、";" で連続
的に実行しています。Otake さんのプログラムも、
        stty cbreak;./a.out
と実行すると動きが変るかも。

>     printf ("Q1. ");
>     g = getchar ();
>     if (g == 'y'){

y リターンと打たせるのが簡単かなあ。fgets() して"y\n" と 
strcmpとか。

なんで標準で1行ごとに読むかというと、昔のコンピュータは遅く
て、しかも複数人で同時に使っていたので、1文字ごとに処理して
いたのでは重すぎたという事情があります。それでgetchar() とい
う名前でありながら、1行単位で反応したりします。

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\