C言語でコンソールでのページめくりを実現するにはどうすればよいですか?

C言語では、コンソールのカーソル位置とコンソールのサイズを使用してページめくりの効果を実現することができます。具体的な手順は次のとおりです。

  1. コンソール画面バッファ情報を取得する
  2. コンソールのサイズに応じて、1ページに表示される行数を定義することができます。例えば、コンソールの行数から制御用の行数を引いた数を1ページに表示します。
  3. 必要なコンテンツやデータを表示する。
  4. 1ページあたりに表示される行数に基づいて、コンテンツやデータをページ単位で配列やリストに保存する。
  5. 現在のページ番号を設定し、初期化を第1ページにします。
  6. 現在のページ数と1ページに表示される行数に基づいて、表示するコンテンツの開始行と終了行を計算してください。
  7. 光标を起点行に移動させるために、光标位置関数を使用します。
  8. 出発行から終了行までのコンテンツをループして印刷します。
  9. ユーザーの入力に基づいて、ページめくりの指示が上向きか下向きかを判断します。
  10. ページめくりの指示に従って、現在のページ数を更新します。
  11. ユーザーが終了を選択するまで、ステップ6からステップ10を繰り返します。

以下は簡単なサンプルコードです:

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

void gotoxy(int x, int y) {
    COORD coord;
    coord.X = x;
    coord.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

void clearScreen() {
    system("cls");
}

void printPage(const char** content, int startLine, int endLine) {
    for (int i = startLine; i <= endLine; ++i) {
        printf("%s\n", content[i]);
    }
}

int main() {
    int pageSize = 10;  // 每页显示的行数
    int currentPage = 1;  // 当前页数
    int totalLines = 100;  // 总行数,假设有100行数据
    int totalPages = (totalLines + pageSize - 1) / pageSize;  // 总页数
    int startLine, endLine;  // 需要显示的起始行和结束行
    const char* content[100] = {
        // 假设有100行内容
        "line 1",
        "line 2",
        // ...
        "line 100"
    };

    while (1) {
        clearScreen();

        startLine = (currentPage - 1) * pageSize;
        endLine = currentPage * pageSize - 1;
        if (endLine >= totalLines) {
            endLine = totalLines - 1;
        }

        printPage(content, startLine, endLine);

        printf("Page %d / %d\n", currentPage, totalPages);
        printf("Press 'U' to page up, 'D' to page down, 'Q' to quit: ");

        char input = getch();
        if (input == 'U' || input == 'u') {
            currentPage--;
            if (currentPage < 1) {
                currentPage = 1;
            }
        } else if (input == 'D' || input == 'd') {
            currentPage++;
            if (currentPage > totalPages) {
                currentPage = totalPages;
            }
        } else if (input == 'Q' || input == 'q') {
            break;
        }
    }

    return 0;
}

このコードは、Windows API関数SetConsoleCursorPositionを使用してコンソールのカーソル位置を設定し、GetConsoleScreenBufferInfoを使用してコンソールのサイズを取得し、getch関数を使用してユーザーの入力を取得しています。必要に応じて適切に変更してください。

bannerAds