赞
踩
由chatgpt生成,彩笔修改并完善ing。
先这样,以后再改
- #include <windows.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include<string.h>
- int main()
- {
- int y,x;
- printf("dvdsvdsvd\n");
- printf("2592626huby 9498\n");
- printf(" 2592626huby 9498\n");
- // 获取标准输出句柄
- HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
-
- // 获取控制台窗口信息
- CONSOLE_SCREEN_BUFFER_INFO csbi;
- GetConsoleScreenBufferInfo(hStdout, &csbi);
-
- // 计算控制台窗口缓冲区的大小
- int bufferSize = csbi.dwSize.X * csbi.dwSize.Y;
-
- // 调整缓冲区的大小
- CHAR_INFO* buffer = (CHAR_INFO*) malloc(bufferSize * sizeof(CHAR_INFO));
- if (buffer == NULL) {
- printf("Error: failed to allocate memory.\n");
- return 1;
- }
-
- // 读取控制台窗口中的文本
- COORD bufferCoord = {0, 0};
- SMALL_RECT readRegion = {0, 0, csbi.dwSize.X - 1, csbi.dwSize.Y - 1};
- ReadConsoleOutput(hStdout, buffer, csbi.dwSize, bufferCoord, &readRegion);
-
- // 输出读取到的文本
- for (y = 0; y < csbi.dwSize.Y; y++) {
- int isEmptyLine = 1; // 默认为是空行
- for (x = 0; x < csbi.dwSize.X; x++) {
- char c = buffer[x + y * csbi.dwSize.X].Char.AsciiChar;
- char* lineStart = &buffer[y * csbi.dwSize.X];
- if (c != ' ') {
- isEmptyLine = 0; // 如果该行有非空字符,说明不是空行
-
- }
- }
- for (x = 0; x < csbi.dwSize.X; x++)
- if (!isEmptyLine) {
- // 只有不是空行才输出换行符
- for (x = 0; x < csbi.dwSize.X; x++){
- char c = buffer[x + y * csbi.dwSize.X].Char.AsciiChar;
- printf("%c",c);
- }
- printf("\n");
- }
- }
-
-
-
- free(buffer);
- return 0;
- }
- typedef struct _CONSOLE_SCREEN_BUFFER_INFO {
- COORD dwSize;//COORD 结构,包含控制台屏幕缓冲区的大小(以字符列和行表示)。
- COORD dwCursorPosition;//包含控制台屏幕缓冲区中光标的列坐标和行坐标。
- WORD wAttributes;
- //由 WriteFile 和 WriteConsole 函数写入屏幕缓冲区或由 ReadFile 和 ReadConsole 函数回显到屏幕缓冲区的字符的属性。
- SMALL_RECT srWindow;//其中包含显示窗口左上角和右下角的控制台屏幕缓冲区坐标。
- COORD dwMaximumWindowSize;//其中包含控制台窗口的最大大小(以字符列和行表示,给定当前屏幕缓冲区大小和字体以及屏幕大小)。
- } CONSOLE_SCREEN_BUFFER_INFO;
-
- typedef struct _COORD {
- SHORT X; // horizontal coordinate
- SHORT Y; // vertical coordinate
- } COORD;
-
- HANDLE是指向内核对象的指针或者句柄。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。