^[[A を無視する方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kodaill

^[[A を無視する方法

#1

投稿記事 by kodaill » 11ヶ月前

C言語のプログラムの標準入力からの入力する際に、矢印↑のキーボードを押すと^[[と表示されます。
例えば、

コード: 全て選択

error_flag = scanf("%d",value);
というコードで 矢印上キーをおした際に、どういう処理になるのでしょうか。
知りたいことは、scanfが何か文字を読み込むが、フォーマットに合致しないので0を返すか(その際にバッファに文字列が残ってしまうのか)
そもそも^[[Aが特殊文字扱いで、scanfは^[[Aを無視して他の文字列をよみこもうとするのか
ということです。

また、矢印上キーからの変な入力を無視する方法はあるのでしょうか。
Overstackflowのサイト(http://stackoverflow.com/questions/2138 ... arrow-keys)で、
同じような質問があったのですが、プログラム自体から無視できるように設定するのはできないようでした(Linuxの設定で変更可能?)
環境はCent OS 6を使っています。
お願いします。

かずま

Re: ^[[A を無視する方法

#2

投稿記事 by かずま » 11ヶ月前

kodaill さんが書きました:知りたいことは、scanfが何か文字を読み込むが、フォーマットに合致しないので0を返すか(その際にバッファに文字列が残ってしまうのか)
scanf は、書式の "%d %d %d" で変換できた個数を返します。
"%d" と 1個なら、1 か 0 を返しますが、EOF(-1)の場合もあります。
読まなかった文字は、標準入力バッファに残ります。
kodaill さんが書きました:また、矢印上キーからの変な入力を無視する方法はあるのでしょうか。
不正な文字を読み飛ばせばよいのでは?

コード: 全て選択

#include <stdio.h>

int main(void)
{
    int value, n;
    while (1) {
        n = scanf("%d", &value);
        if (n == 1) break;      // 正しく読み込めた
        if (n == EOF) return 1; // 入力終わり (Ctrl-D)
        getchar();              // 不正な文字を読み飛ばす
    }
    printf("value = %d\n", value);
    return 0;
}

返信

“C言語何でも質問掲示板” へ戻る