合計 昨日 今日

^[[A を無視する方法

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: kodaill
[URL]
Date: 2017年5月18日(木) 01:08
No: 1
(OFFLINE)

 ^[[A を無視する方法

C言語のプログラムの標準入力からの入力する際に、矢印↑のキーボードを押すと^[[と表示されます。
例えば、
コード[C++]: 全て選択
1
error_flag = scanf("%d",value);

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

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

Name: かずま
[URL]
Date: 2017年5月18日(木) 02:48
No: 2
(OFFLINE)

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

kodaill さんが書きました:知りたいことは、scanfが何か文字を読み込むが、フォーマットに合致しないので0を返すか(その際にバッファに文字列が残ってしまうのか)

scanf は、書式の "%d %d %d" で変換できた個数を返します。
"%d" と 1個なら、1 か 0 を返しますが、EOF(-1)の場合もあります。
読まなかった文字は、標準入力バッファに残ります。

kodaill さんが書きました:また、矢印上キーからの変な入力を無視する方法はあるのでしょうか。

不正な文字を読み飛ばせばよいのでは?
コード[C]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#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;
}


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[14人]