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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

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

Q&A

解決済

3回答

1914閲覧

C++で標準出力に出ている文字列を後から置換したいです

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

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

0グッド

0クリップ

投稿2020/05/21 18:06

いきなり本題です

cpp

1std::cout << "Hello Golang" << std::endl;

こうすると当たり前ですがコンソール上に Hello Golang と表示されますよね

これを表示させた後に例えば Hello C++に変更する方法を知りたいです

次の行に付け足すのではなく、Golangを消してそこに代わりにC++を入れる方法です!!!!

知恵をお貸しください!!!!

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

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

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

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

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

guest

回答3

0

ベストアンサー

コンソールが対応していれば、エスケープシーケンスを利用することで実現できます(大抵対応してると思います)。
ANSIエスケープシーケンス チートシート
\e[で始まる文字列で命令を送り込むことにより、コンソールの内容をより自由に操作することができます

cpp

1#include <iostream> 2 3int main(){ 4 std::cout << "Hello Golang"; 5 std::getchar(); 6 std::cout << "\e[1A\e[6CC++\e[K" << std::endl; 7}

このコードは、実行すると

Hello Golang

となり(カーソルはGolangの次)、Enterを押すと

Hello C++

に書き換わり終了します。エスケープシーケンスのそれぞれの命令が何をやっているかは、冒頭に貼ったページを見るなどしてみてください。
\e\033にしないと動かない環境もあるようです。

(getcharで一時停止することの是非については無視しています)

投稿2020/05/21 19:16

ohys

総合スコア147

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

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

cateye

2020/05/21 20:13

懐かしいですねd^^・・・・忘れていた・・・xfce4-terminalでもOKでした。
pepperleaf

2020/05/22 01:57 編集

Windowsは ? 確か、標準では NGだったかと。 エスケープシーケンスに対応してる端末限定の話。
退会済みユーザー

退会済みユーザー

2020/05/22 06:13

ありがとうございます!よくわかりました。
guest

0

標準出力は、C++言語自体が扱う範囲の外側の世界です。普通はOSかな。で、それを表示するのはまた別のデバイスのお仕事です。
つまり、「C++で」なにか出来る話ではなくて、OSに、そして表示デバイスに、文字を消して表示し直すような機能があればそれをC++から使うんだ、ということはしっかり押さえておく必要があります。

太古の昔には出力デバイスはプリンターでした。キーボードとセットで「テレタイプ」。紙に書いちゃうんだから「出した文字を消す」なんてことは出来ませんね。印字しちゃったんだから。このとき使われたインターフェースがRS232Cなので、unix系ではシリアルデバイスにttyナンチャラというデバイス名が使われているのが名残。
余計なことを言えば、「標準入力」とか「標準出力」なんて考え方も、入出力装置が別体だったこの辺から来ているのでしょう。

時代が少し下がって、文字だけならなんとか画面上に表示出来る時代になります。キャラクタ端末とか(この呼び方は「グラフィック端末(グラタン)」があってこそのもの(キャラタン)なんだけど、当時はなんていってたのかな。)
この時期に売れたVT-100等で搭載されたのが「エスケープシーケンス」。画面をクリアしたりとか、表示位置を変える機能を出力する文字列に混ぜ込んで実現したもの。以降、これがそういう操作の標準となりました。端末装置が別体じゃなくなって、端末プログラムとかコマンドプロンプトとか呼ばれる様になっても、この機能は引き継がれました。Windowsでも95あたりまでは(一部手続きは必要だけど)使えたんだけど...Windows10になって(これも一部手続きは必要だけど)復活してきたりしています。

いろいろ機能はあるので'エスケープシーケンス カーソル位置'とかでググってみて下さい。単にエスケープシーケンスだけだと、「文字列中に何かを埋め込む操作」一般論が結構入ってきてしまうので。
Windowsでエスケープシーケンスが使えない場合はWin32APIで操作します。こちらも'Win32API カーソル位置'とかでググればなんとかなるかと。

投稿2020/05/21 23:52

編集2020/05/21 23:53
thkana

総合スコア7703

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

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

退会済みユーザー

退会済みユーザー

2020/05/22 06:14

わざわざありがとうございました!そういう基礎知識(雑学?)ためになるので大好きです!
guest

0

同じ行を書き直せばいいんですよね。

C++

1#include <iostream> 2 3#if defined(_WIN32) || defined(_WIN64) 4#include <windows.h> 5 6void sleep3() { 7 std::cout << std::flush; 8 Sleep(3000); 9} 10#else 11#include <unistd.h> 12 13void sleep3() 14{ 15 std::cout << std::flush; 16 timeval t = { 3 }; 17 select(0, nullptr, nullptr, nullptr, &t); 18} 19#endif 20 21int main() 22{ 23 std::cout << "Hello Golang"; 24 sleep3(); 25 std::cout << "\rHello C++ "; 26 sleep3(); 27 std::cout << "\n"; 28}

追記

C

1#include <windows.h> 2#include <stdio.h> 3#include <stdlib.h> // system 4 5int main(void) 6{ 7 system("cls"); 8 9 HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); 10 puts("1. apple \n" "2. orange\n" "3. grape "); 11 Sleep(2000); 12 13 COORD coord = { 0, 1 }; 14 SetConsoleCursorPosition(h, coord); 15 puts("5. banana"); 16 Sleep(2000); 17 18 coord.Y = 0; 19 SetConsoleCursorPosition(h, coord); 20 puts("7. peach "); 21 Sleep(2000); 22 23 coord.Y = 3; 24 SetConsoleCursorPosition(h, coord); 25}

投稿2020/05/22 01:24

編集2020/05/22 05:00
kazuma-s

総合スコア8224

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

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

退会済みユーザー

退会済みユーザー

2020/05/22 04:17

環境を書き忘れてしまってましたごめんなさい! windows 10 64bitでの想定です! 特定の行を書き換えるようなことはできますかね? 1 2 3 と三つ行があったとして、この中の2を5に変えたりとか そもそも不可能なんでしょうか...
pepperleaf

2020/05/22 06:01

エスケープシーケンスが使える環境ならば、その範囲内で、なんでもOK。 画面上の好きな位置にカーソル移動できます。ただ、そこまでするのに、なんで、コンソール? (Windows以前の技術)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問