続 バックスペースについて

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

続 バックスペースについて

#1

投稿記事 by dic » 15年前

バックスペースについて もう一回質問したいです

下のコードを実行すると
#include    <stdio.h>
#include    <windows.h>

void    main()
{
    int    i ,j;
    for( i=0; i<10; i++ )
    {
        for( j=0; j<10; j++ )
        {
            printf( "%d", i );
        }
    }
    Sleep( 1000 * 5 );
    for( i=0; i<100; i++ )
        putchar( 0x08 );
}
(上の段)0000000001111111111......777777777
(下の段)8888888889999999999_

から

(上の段)0000000001111111111.....7777777
(下の段)_

_が出力先頭になるのですが

コンソール上で改行が起きると
上の段に出力先頭の位置を戻す方法はないのでしょうか?

バグ

Re:続 バックスペースについて

#2

投稿記事 by バグ » 15年前

WINAPIを使用してもよいのであれば可能ですよ(^-^)

バグ

Re:続 バックスペースについて

#3

投稿記事 by バグ » 15年前

戻すというよりは、好きな位置へカーソルを移動させることで解決できるかと思います。
提示されたソースにwindows.hと書かれてあるので、WINAPIを使用できる環境だと仮定して書き込みますね。
#include <stdio.h>
#include <windows.h>

VOID main(VOID)
{
    // 出力先のハンドルを取得
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

    // COORD構造体へ座標を設定する
    COORD stPosition = {10, 0};

    // COORD構造体で指定された座標へカーソルを移動させる
    SetConsoleCursorPosition(hOut, stPosition);

    // 文字列を出力する
    printf("test\n");
}
WINAPIを使用できるコンソールアプリでは、こんな方法で任意の位置へ文字列を出力することが可能です。
ただ、このままでは少々使いづらいかもしれませんので、出力ハンドルをグローバル変数にしたり、位置指定している箇所を関数化したりカスタマイズした方が便利かもしれませんが…(^_^;)

参考までに…ですが、コンソールアプリでも、文字に色をつけたりすることも可能です。固定16色しかありませんけどね(苦笑)

dic

Re:続 バックスペースについて

#4

投稿記事 by dic » 15年前

カーソルの位置を変更するのは成功しましたが
下のようにすると、付属画像のようになります
#include    <stdio.h>
#include    <string.h>

void    main()
{
    char    http[1024] = "http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1414571724";
    int        len = strlen(http);

    int    i, j;
    for( i=0; i<99; i++ )
    {
        printf( http );
        for( j=0; j<len; j++ )
            putchar( 0x08 );
    }
}

この表示しているものを消すにはどうすればいいでしょうか?

バグ

Re:続 バックスペースについて

#5

投稿記事 by バグ » 15年前

バックスペース(0x08)を出力してもカーソルが戻るだけですので、表示を消したい場合はスペースで上書きしてやる必要があります。

それと、細かいことですが、strlen関数の戻り値はsize_t型ですので注意しましょう。(ちなみにVC++6.0ではsize_t型はunsigned int型です)

#include <stdio.h>
#include <string.h>

void main()
{
    char http[1024] = "http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1414571724";
    int len = (int)strlen(http);
    int    i;

    printf("%s", http);
    for (i = 0 ; i < len; ++i)
    {
        putchar(0x08);
        putchar(' ');
        putchar(0x08);
    }
}

dic

Re:続 バックスペースについて

#6

投稿記事 by dic » 15年前

多分、動作すると思います

バグ

Re:続 バックスペースについて

#7

投稿記事 by バグ » 15年前

はいはい、聞く耳持たない訳ね。
勝手にしてくださいな…┐('~`;)┌

Mist

Re:続 バックスペースについて

#8

投稿記事 by Mist » 15年前

> この表示しているものを消すにはどうすればいいでしょうか?

前の質問のときに回答したけどなぁ。

lbfuvab

Re:続 バックスペースについて

#9

投稿記事 by lbfuvab » 15年前

system("CLS");

↑でも良いかと思いますけどね(ただしベッタリと環境依存)

dic

Re:続 バックスペースについて

#10

投稿記事 by dic » 15年前

>Mistさん
前回は回答ありがとうございました
今回はコンソール上で改行されてるとバックスペースで消せなかったので
もういちど質問させてもらいました

>lbfuvabさん
おお、そんな命令あったんですね
環境依存のようですが、Windows前提なんでとても使えます


参考に私が買った参考書の画像を貼り付けておきます
苦情はその方におっしゃってください
前にも言いましたが戻り値使わないんで

Mist

Re:続 バックスペースについて

#11

投稿記事 by Mist » 15年前

> 前にも言いましたが戻り値使わないんで

なんか勘違いしてません?
バグさんはstrlenの戻り値の型の話しているのに、なんでmainの戻り値の話なの?

dic

Re:続 バックスペースについて

#12

投稿記事 by dic » 15年前

すいません、バックスペースに関して質問してるんで

バグ

Re:続 バックスペースについて

#13

投稿記事 by バグ » 15年前

質問のタイトルはともかく、最初の書き込み内容は…

>>コンソール上で改行が起きると上の段に出力先頭の位置を戻す方法はないのでしょうか?


であった訳ですから、コンソール上でのカーソル制御についての質問でした。

あなた自身、バックスペースについては全く質問されていませんが?

かなり拡大解釈して、私が提示してみたバックスペースを使用しての文字の消去処理のサンプルについては、全く無反応でしたから、あなたが思っていた動作とは違うようですし、何がしたいのか意味不明です。

dic

Re:続 バックスペースについて

#14

投稿記事 by dic » 15年前

関りたくないんで、管理人さん
不適切でしたら削除してください

Q

Re:続 バックスペースについて

#15

投稿記事 by Q » 15年前

質問するだけしておいて都合が悪くなると関わりたくないって・・・

Tororo

Re:続 バックスペースについて

#16

投稿記事 by Tororo » 15年前

とりあえず、回答者sにアリガトウとか言ったら?

dic

Re:続 バックスペースについて

#17

投稿記事 by dic » 15年前

>バグさん
ありがとうございました

バグ

Re:続 バックスペースについて

#18

投稿記事 by バグ » 15年前

何故お礼を言われるのか分かりませんが、これ以上かかわりあいたくないので、ここへの書き込みは止めます。

閉鎖

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