C言語関係掲示板

過去ログ

No746 Cygwinでエコーなし入力

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

入出力とgetchar
投稿者---魚布(2003/09/10 18:12:03)


はじめまして。CygwinでCを独学している者です(キャリア2ヶ月)。
タイピングゲームを作ろうとしているのですが、getcharでは打ち込んだ文字が端末ドライバにためこまれてしまいますし、conio.hも使えないので困っています。
このような場合、文字を即座にプログラムに受け取らすためにはどうすればよいのでしょうか?教えてください。

No.9271

Re:入出力とgetchar
投稿者---nop(2003/09/10 18:38:54)


>タイピングゲームを作ろうとしているのですが、getcharでは打ち込んだ文字が端末ドライバにためこまれてしまいますし、conio.hも使えないので困っています。
>このような場合、文字を即座にプログラムに受け取らすためにはどうすればよいのでしょうか?教えてください。

環境依存の関数を使うしかないかと。

No.9272

Re:入出力とgetchar
投稿者---魚布(2003/09/10 18:55:09)


>環境依存の関数を使うしかないかと。

やはりそうなるんでしょうね。環境が違うからある程度の違いは認識しないといけないですね。


No.9273

Re:入出力とgetchar
投稿者---かずま(2003/09/10 19:07:37)


> はじめまして。CygwinでCを独学している者です(キャリア2ヶ月)。
> タイピングゲームを作ろうとしているのですが、getcharでは打ち込んだ
> 文字が端末ドライバにためこまれてしまいますし、conio.hも使えないので
> 困っています。
> このような場合、文字を即座にプログラムに受け取らすためにはどうすれば
> よいのでしょうか?教えてください。

Cygwin ですね。次のプログラムは参考になりますか?
#include <stdio.h>
#include <termios.h>

int main(void)
{
    struct termios t, t0;
    int c;

    tcgetattr(0, &t);
    t0 = t;
    t.c_lflag &= ~(ICANON | ECHO);
    t.c_cc[VMIN] = 1;
    t.c_cc[VTIME] = 0;
    tcsetattr(0, TCSANOW, &t);

    while ((c = getchar()) != 'q')
        putchar(c);
    
    tcsetattr(0, TCSANOW, &t0);
    return 0;
}


No.9274

Re:入出力とgetchar
投稿者---魚布(2003/09/10 19:52:25)


おおっ!感動しました!これをもとに改良すれば求めるものが出来そうです。
でも自分の勉強不足で半分くらいソースが解らない。。。べんきょうしなきゃ。
かずまさん、ありがとうございます。昔raw modeとかいうものの存在を聞いたことがあるので、それにしなきゃいけないのかと本気で思っていました。