• ベストアンサー

DOS画面でテキストカーソルの位置を移動する(C言語)

 DOS用のC言語プログラムを作っています。そこで printf関数などで文字列を表示した後表示した文字列の 間に違う文字列を挿入したりしたいのですがそんなことは 可能でしょうか? #include <stdio.h> int main(void){ printf("13456789"); printf("2"); return 0; } というプログラムを作ったとして1と3の間に割り込んで2と 入れたい場合どうしたらよいでしょうか? 開発環境はwindowsXPでコンパイワはBorlandです。

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

#1の方の手順が使えるのは、本当にMS-DOS互換のプログラムだけです。 Borlandのコンパイラが、実は往年のTurboC++だとか言わない限り、WinXPではエスケープシーケンスは使えません。 Borland C++ 5.5等を使われているのであれば、それはコンソールアプリであって、DOSアプリとは中身が違います。 (見た目や書き方は大差ないですが) →Win32APIを呼ぶのが定石でしょうか。 SetConsoleCursorPosition等を調べてみてください。

amazontester
質問者

お礼

なるほど。移植性を考えるとWinAPIを使うがベストのようですね。私のスキルでは難しそうですが勉強してみます。ありがとうございました。

その他の回答 (2)

  • goku3
  • ベストアンサー率35% (15/42)
回答No.3

例えば、結果的(見た目)に目的の方法を達成したいのであれば、 printf("13456789"); printf("\r"); //カーソルを先頭へ printf("123456789"); で、そんな風にはなります。。。

amazontester
質問者

お礼

見た目的にやるのでは無くて本質的にやりたいのですが・・とにかく回答ありがとうございます。

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.1

エスケープシーケンスというものを使用すれば可能です。 NECのMS-DOSの時は結構使っていました。 Windowsになってから、全く同じ使い方は出来なくなったようなので、下記URLを参考にしてみてください。 http://kasai86.ld.infoseek.co.jp/dos/esc.htm

amazontester
質問者

お礼

こういうやり方もあるんですね。勉強になりました。ただ移植性を考えると使いにくい手法かもしれません。

関連するQ&A

  •  現在、私はC言語を学んでいます。

     現在、私はC言語を学んでいます。  プログラミングの初期の初期の問題なんですが、 「Hello World」という有名なプログラムがありますよね? それについての質問です。 #include<stdio.h> main() { printf("Hello World"); return 0; } も #include<stdio.h> main(void) { printf("Hello World"); return 0; } も #include<stdio.h> int main() { printf("Hello World"); } もちゃんと表示できます。 ここで質問です。 int main(void) int main() main() main(void) はどう違うんですか? あと、 return 0; はあっても無くてもいいようなんですが どういう意味があるんでしょうか?

  • C言語の問題が解けません!

    僕は、C言語を勉強しているのですがこの問題の答えがわかりません。 どうか教えてください。 回答お願いします。 ・問題・ 10文字以内の2つの英単語を入力し、アルファベット順で最初にくる単語を表示するプログラムを作りなさい。 /プログラム/ #include<stdio.h> #include<string.h> int main(void) { char str1[256],str2[256]; int i; printf("文字列1は?"); printf("文字列2は?"); return 0; }

  • C言語初心者です。

    C言語初心者です。 1^2-2^2+3^3-4^2…+99^2-100^2の値を求めるプログラムを作成したいのですが上手くいきません。 どこが足りないのですか? #include <stdio.h> int main(void) { printf("%d", 1^2 - 2^2 + 3^2 - 4^2 … + 99^2 - 100^2); return (0); } よろしくお願いします。

  • C言語プログラミングについて

    #include <stdio.h> int main(void) { printf("hello,world\n"); } □■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ #include <stdio.h> int main(void) { printf("hello"); printf(",world"); printf("\n"); } 上の2つのプログラムをコンパイルするとどのような違いが生じるんですか??printfってどんな働きをするんですか?

  • C言語の問題で困っています。

    C言語の問題で困っています。 誰か教えてください。 下の問題ですが、intがiだけでプログラムするにはどうしたら良いでしょうか? (a)から(d)に入るプログラムをすいませんが教えてください。 お願いします。 【問題】 1以上10以下の整数を昇順に区切って表示するプログラムです。 実行例 1 2 3 4 5 #include <stdio.h> int main (void) { int i; (A) while ((b)){ (c); (d); } printf("¥n"); return(0); }

  • C言語の質問です

    キーボードから文字列を何度も入力し、入力文字数が0文字になるまで入力を繰り返し合計の文字数を表示するプログラムでなのですが。 ???の部分がわかりません 教えて頂けませんか? #include <stdio.h> #include <string.h> //関数のプロトタイプ宣言 int input(); int main(void) { int n; //入力文字数 int total; //合計文字数 for(total = 0 ; (n =??? ) != 0; total +=n ); printf("%d文字\n" , total); } int input() { char buff[80]; printf("文字列を入力:"); gets(buff); return ??? ; }

  • C言語で乱数がうまく効きません。下記のソースでコンパイルして実行すると

    C言語で乱数がうまく効きません。下記のソースでコンパイルして実行すると結果が130固定となってしまいます。 #include <stdio.h> #include <stdlib.h> int main(void){ int x; x = rand(); printf("%d",x); return 0; } 使っているコンパイラはBorland C++ 5.5.1です。何か間違いでもあるのでしょうか?よろしくお願いします。

  • C言語について

    #include <stdio.h> int main(void) { printf("123456\tABC DEFGHIJK\n"); printf("2006/4/14\n"); printf("programing\n"); } のprintfをすべてputsに書き換えてコンパイル・実行すると、 #include <stdio.h> int main(void) { puts("123456\tABC DEFGHIJK\n"); puts("2006/4/14\n"); puts("programing\n"); } になると思うんですけど、そのputsを用いて上のprintfを用いたプログラムと同じ出力を得るにはどのようなプログラムに変えればいいのでしょうか?

  • c言語についての質問です。

    #include<stdio.h> int main(void){ int a; printf("1文字たいぷしてください。\n"); scanf("%d",&a); if(a>=65 && a<=90){ printf("大文字です。\n"); } else if(a>=97 && a<=122){ printf("小文字です。\n"); } else{ printf("大文字でも小文字でもありません\n"); } return 0; } このプログラムは正しくなくて、 intをchar %dを%cにかえなければなりません。 なぜintはダメなんでしょうか? できれば丁寧に教えてください。 お願いします。

  • C言語、スキャン集合について

    下記のプログラムはスキャン集合を使って入力された文字列の先頭に 並んでいる数字を読み込んで捨て、その後に続く文字列を読み込んで 表示するものです。 #include <stdio.h> int main(void) { char str[80]; printf("数字に続けて文字列を入力してください\n"); scanf("%*[0-9]%s", str); printf("%s", str); return 0; } 【質問】%*[0-9] を %[^0-9] に置き換えてコンパイルして実行すると、 意味不明の文字列が出力されるのはなぜでしょうか? 置き換えても同じ結果になる気がするのですが…

専門家に質問してみよう