掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.26741

エラー表示について
投稿者---あきき(2006/05/05 01:54:16)


1.前処理で、全てのデータを構造体変数に代入する。
2.各項目のチェックを行う。
3. 項目チェックでエラーが発生した時には、背景は一行赤色にして文字は白色で、文字は左詰とします。
4. エラー表示処理が終わり次第、既定値にもどす。

「猫でもわかるプログラミング」の第58章ではどうしても文字分の背景しか塗りつぶしが出来ないので、背景を一行分塗りつぶしができる様にするにはどうしたらよいか悩んでいます。
お分かりの方どうか教えて下さい。 


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:エラー表示について 26742 επιστημη 2006/05/05 08:44:57


No.26742

Re:エラー表示について
投稿者---επιστημη(2006/05/05 08:44:57)


>「猫でもわかるプログラミング」の第58章ではどうしても文字分の背景しか塗りつぶしが出来ないので、背景を一行分塗りつぶしができる様にするにはどうしたらよいか悩んでいます。

行の残りを空白で埋める。




この投稿にコメントする

削除パスワード

No.26748

Re:エラー表示について
投稿者---あきき(2006/05/06 01:03:51)


>行の残りを空白で埋める。
>
早速の返信有難うございます。
なるほど、行の残りを"全角"空白で埋めれば良かったのですか。何でそんな簡単な事が思いつかなかったのか。とほほ。

けど、エラーメッセージのアドレスをエラー表示関数(仮名)に渡して表示する事は出来ないのでしょうか。



この投稿にコメントする

削除パスワード

No.26749

Re:エラー表示について
投稿者---かずま(2006/05/06 03:32:51)


> なるほど、行の残りを"全角"空白で埋めれば良かったのですか。

なぜ、全角なんですか?
#include <windows.h>
#include <stdio.h>

void error(const char *msg)
{
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
    GetConsoleScreenBufferInfo(hStdout, &csbi);
    SetConsoleTextAttribute(hStdout,
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE
        | FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_INTENSITY);
    printf("%-*s\n", csbi.dwSize.X, msg);
    SetConsoleTextAttribute(hStdout, csbi.wAttributes);
}

int main(void)
{
    error("エラー");
    return 0;
}



この投稿にコメントする

削除パスワード

No.26750

Re:エラー表示について
投稿者---かずま(2006/05/06 03:38:02)


>   printf("%-*s\n", csbi.dwSize.X, msg);

訂正
    printf("%-*s", csbi.dwSize.X, msg);



この投稿にコメントする

削除パスワード

No.26766

Re:エラー表示について
投稿者---あきき(2006/05/07 02:28:49)


CONSOLE_SCREEN_BUFFER_INFOについて知りたいのですが、
それを説明しているサイトがどうしても見つからず、
そのため以下の一行の意味が分りません。

printf("%-*s", csbi.dwSize.X, msg);
csbi.dwSize.Xのもともとの意味、そして、
「%-*」の部分の意味が分らないのですが。
「*」は抑制子と思うのですが。


この投稿にコメントする

削除パスワード

No.26768

Re:エラー表示について
投稿者---Blue(2006/05/07 02:47:57)


>「%-*」の部分の意味が分らないのですが。
- は左詰に、*は文字列長を引数リストから指定できるというのです。

例えば
int width = 20;
printf( "%*s\n", width, "実験です。" );

を実行してみましょう。どのように表示されているか確認してみてください。
そしたら、width を変えてみたり、%-*s にして見たりして動かしてみてください。


先ずは、リファレンスやサイト検索してみてコードを書いてみよう。
質問はその後。



この投稿にコメントする

削除パスワード

No.26769

Re:エラー表示について
投稿者---あきき(2006/05/07 03:45:49)


csbi.dwSize.Xの値は80だったんですね。そして、*は抑制子ではなく任意の指定された文字数を表すってことか。
dwSize構造体の中身が見えなくて困ってました。構造体メンバーの既定値も。MSDNで検索したんですけど。


この投稿にコメントする

削除パスワード

No.26770

Re:エラー表示について
投稿者---あきき(2006/05/07 04:03:17)


訂正
>csbi.dwSize.Xの値は80だったんですね。そして、*は抑制子ではなく任意の指定されたバイト数を表すことだったんですね。




この投稿にコメントする

削除パスワード

No.26781

Re:エラー表示について
投稿者---あきき(2006/05/08 01:55:14)


何故、csbi.dwSize.Xの値が80なのか説明しているサイトをご存知の方、どうか教えて下さい。

どうもどこかで初期化しているみたいですが、半日かけてもその見つからないので困っています。
単に、csbi.dwSize.X == 80と暗記しているだけで全く理解していません。

csbiには他にも
typedef struct _CONSOLE_SCREEN_BUFFER_INFO { // csbi  
    COORD      dwSize; 
    COORD      dwCursorPosition; 
    WORD       wAttributes; 
    SMALL_RECT srWindow; 
    COORD      dwMaximumWindowSize; 
} CONSOLE_SCREEN_BUFFER_INFO ;

と定義されています。


この投稿にコメントする

削除パスワード

No.26782

Re:エラー表示について
投稿者---Blue(2006/05/08 02:03:02)


普通に MSDN で。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/console_screen_buffer_info_str.asp


この投稿にコメントする

削除パスワード

No.26784

Re:エラー表示について
投稿者---kz3(2006/05/08 10:32:23)


>構造体メンバーの既定値も
初期化のされていない変数の値は不定です。

>何故、csbi.dwSize.Xの値が80なのか
分かりません。( 何を意図した質問なのかも分からない。 )
# 「80」の意味ですか?

>どうもどこかで初期化しているみたいですが、
初期化って何のことですか?
# スクリーンバッファの状態( 情報 )の取得のことだとしたら、
# 猫でもさんの58章をちゃんと読んでいないだけでは?

>単に、csbi.dwSize.X == 80と暗記しているだけで全く理解していません。
暗記しても別にいいですけど、プログラム中で「80」なんて使えませんよ。

>csbiには他にも
typedef struct _CONSOLE_SCREEN_BUFFER_INFO { // csbi
...
と定義されています。
これは何を聞きたいのでしょう...?
# SMALL_RECT構造体とか?

Web上でソースを見つけても、それを読まなければ理解は出来ませんです。

何をMSDNで検索したのか教えていただきたいです。





この投稿にコメントする

削除パスワード

No.26791

Re:エラー表示について
投稿者---あきき(2006/05/08 17:08:45)


>何故、csbi.dwSize.Xの値が80なのか
>分かりません。( 何を意図した質問なのかも分からない。 )
># 「80」の意味ですか?

はい、その通りです。
GetConsoleScreenBufferInfo(hStdout, &csbi);
で,スクリーンバッファの状態( 情報 )の取得した結果、
csbi.dwSize.X == 80 となるのでしょうか。


この投稿にコメントする

削除パスワード

No.26795

Re:エラー表示について
投稿者---Hermit(2006/05/08 21:42:43)


Blueさんが
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/console_screen_buffer_info_str.asp




と書いていると思いますが・・・
スクリーンの画面バッファのサイズ(幅(W))でないかと思うけど。
英語は苦手なので、本気では読んでないけど・・・
勘でもそうなるからいいんでないかな(^^;


この投稿にコメントする

削除パスワード

No.26800

Re:エラー表示について
投稿者---あきき(2006/05/08 23:08:18)


Blueさんが示してくださいました、サイトで一度にたくさんのことを知りえたようです。(英語が苦手で・・)

私もスクリーンの画面バッファのサイズ(幅(W))でないかと思いましたが、後は自分で調べてみます。
Blueさん、かずまさん、kz3さん、επιστημηさん
どうもありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧