教えてください

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

教えてください

#1

投稿記事 by みやび » 9年前

C言語で、画面の中央に文字列を表示する場合は、どうしたらいいですか??

お願いします。

アバター
パコネコ
記事: 139
登録日時: 9年前
住所: 大阪

Re: 教えてください

#2

投稿記事 by パコネコ » 9年前

C言語で。というと?
何を使ってますか?
DXライブラリとか?でしょうか?
ニャン!!\(゜ロ\)(/ロ゜)/

アバター
bitter_fox
記事: 607
登録日時: 9年前
住所: 大阪府

Re: 教えてください

#3

投稿記事 by bitter_fox » 9年前

みやび さんが書きました:C言語で、画面の中央に文字列を表示する場合は、どうしたらいいですか??

お願いします。
画面の中央ってど真ん中ということでよろしいですね?

コンソールAPIを使うのが一般的でしょう。

コード:


#include <windows.h>
#include <stdio.h>
#include <conio.h>

int main()
{
	HANDLE hStdout;                    // コンソール出力のハンドル
	CONSOLE_SCREEN_BUFFER_INFO cinf;   // コンソールスクリーン情報

	COORD dwPos;                       // 位置情報

	char *str = "HelloWorld";          // 出力文字列
	int counter;                       // カウンタ

	hStdout = GetStdHandle(STD_OUTPUT_HANDLE);      // コンソール出力のハンドル

	GetConsoleScreenBufferInfo(hStdout, &cinf);     // コンソールスクリーン情報を取得する

	dwPos.X = (cinf.dwSize.X - strlen(str)) / 2; // 横の最大文字列から出力文字列を引いて二で割るとX軸は中央になる。

	dwPos.Y = cinf.dwCursorPosition.Y +    (cinf.srWindow.Bottom-cinf.srWindow.Top) / 2;
	//        ↑現在のカーソルの位置(Y軸)  ↑ウィンドウの一番下の位置から一番上の位置を引けばウィンドウのY軸方向の幅が出る
	//                                       それを2で割ると中央の位置が出る。

	if (!SetConsoleCursorPosition(hStdout, dwPos))  // カーソルの位置を設定する
	{
		return -1;
	}

	WriteConsole(hStdout, "HelloWorld", strlen("HelloWorld"), NULL, NULL); // 文字列を出力する。

	for (counter = (cinf.srWindow.Bottom - cinf.srWindow.Top) / 2; counter > 0; counter--)
	{//             ↑あと半分を改行で埋める。
		printf("\n");
	}

	getchar();

	return 0;
}

[hr][修正]
コメントを整えました。
[修正・追記]
mainが戻り値を返してなかったので修正
一文字を受け取ってから終了するように変更

[補足]
一個目の方法だと、コマンドプロンプトのカーソルが一番下とかにいてるとカーソルの位置を設定できないので何も表示されずに終了してしまします。

[hr][追記]
もうちょっと簡単にできるので追記。

コード:


#include <windows.h>
#include <stdio.h>
#include <conio.h>

int main()
{
	HANDLE hStdout;                    // コンソール出力のハンドル
	CONSOLE_SCREEN_BUFFER_INFO csbi;   // コンソールスクリーン情報

	int counter;                       // カウンタ
	char *str = "HelloWorld";          // 出力文字列

	hStdout = GetStdHandle(STD_OUTPUT_HANDLE);      // コンソール出力のハンドル

	GetConsoleScreenBufferInfo(hStdout, &csbi);     // コンソールスクリーン情報を取得する

	for (counter = 0; counter < csbi.srWindow.Bottom - csbi.srWindow.Top; counter++) // 画面下まで改行
	{
		if (counter == (csbi.srWindow.Bottom - csbi.srWindow.Top) / 2) // ちょうど画面の半分に来たら
		{
			printf("%*s%s", (csbi.dwSize.X - strlen(str)) / 2, "", str); // X軸の半分になるように出力
		}
		printf("\n");
	}

	getchar();
	return 0;
}
最後に編集したユーザー bitter_fox on 2010年12月29日(水) 18:25 [ 編集 2 回目 ]

アバター
みけCAT
記事: 6246
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 教えてください

#4

投稿記事 by みけCAT » 9年前

環境を教えてください。
フォーラムルールもお読みください。
http://homepage3.nifty.com/aokura/
「C言語を始めよう! 1.1.2.2」に文字列をウィンドウの中央に表示するプログラムが付いてきます。
「ひな形>サンプル(Windows)」です。
そのソースを乗せようとしたら「禁止されている単語が見つかりました」だそうなので...
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

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