質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Clang

Clangは、プログラミング言語 C、C++、Objective-C、Objective-C++ 向けのコンパイラである。

Q&A

2回答

737閲覧

cin による入力時にカーソルの移動ができません。

退会済みユーザー

退会済みユーザー

総合スコア0

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Clang

Clangは、プログラミング言語 C、C++、Objective-C、Objective-C++ 向けのコンパイラである。

0グッド

0クリップ

投稿2020/09/03 14:30

編集2022/01/12 10:55

前提・実現したいこと

Windows(MinGW)からMacに環境を移しました。
std::cinで文字を入力するときに、左右キーでカーソルの移動や上下キーで入力履歴を表示しようとすると^[[A^[[B^[[D^[[Cなどがターミナルに表示されます。

発生している問題・エラーメッセージ

Enter your name. testest^[[D^[[D Your name is testest Hello teste!t

該当のソースコード

C++

1#include <string> 2#include <iostream> 3using namespace std; 4 5int main() 6{ 7 string name; 8 cout << "Enter your name.\n"; 9 cin >> name; 10 cout << "Your name is " << name << '\n'; 11 cout << "Hello " << name << "!\n"; 12}

試したこと

clang cin terminal ^[[A などで検索
clang readline で検索
似た質問を読む
bashで実行してみる(結果は同じ)

補足情報(FW/ツールのバージョンなど)

macOS 10.15.6
clang 11.0.3
コマンド:

g++ hello.cpp

普通にターミナルを使っているときはカーソルも移動できるし入力履歴も表示できる
zshを使用している

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

カーソルも移動できるし入力履歴も表示できる

それは、シェルがいるからです。
std::cinにシェルは介在しません。

投稿2020/09/03 16:41

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/09/04 12:18

自分でコンパイラのオプションをつけたりして cin 入力時にカーソル移動できるようにするのは無理ですか?
cateye

2020/09/04 13:00 編集

コンパイラで、どうにか出来る問題では有りません。 どうしても必用なら、生のキーコードを(プログラムに先立って?)フックして、エスケープコードに置き換えてターミナルに出力しなくてはなりません。・・・ターミナルが対応していればですが・・・ (別スレッドにするか、裏で別のプログラムを動かすか?) ・・・いずれにしても(cinと競合するため)キー入力に対して排他制御が必用です。 参考:「ANSIエスケープコード」https://www.mm2d.net/main/prog/c/console-02.html
cateye

2020/09/04 23:42 編集

iTerm2で、今ちょっとやってみたんですがdeleteキーは効きますね あと、文字入力ならパイプ'|'を使えば、ターミナルの機能を使えますよ ----->8----->8----->8----->8----->8----->8----->8----->8----->8----- usr ~/Project/test % echo abcdef | ./a.out お名前は?: こんにちはabcdefさん
guest

0

残念ながらターミナル上で方向キー押したところでカーソルは上下左右には動きません。
テキストエディタなどで上下左右に動くのは、ターミナルのエスケープシーケンスに従って上下左右に動くように、エディタが出力しているのです。

投稿2020/09/03 14:50

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/09/04 12:28

そうだとすると、Mac ターミナルで cin で簡単な入力をテストしたいときに、途中挿入や入力履歴が使えないのは非常に不便ですね。残念・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問