sistema simbolo reconoce programas programa para interno externo ejecutar con compilar como comando c console size windows-console

simbolo - programa para compilar c++



¿Cómo obtener el tamaño del terminal en c para Windows? (2)

(Respuesta parcial)

Este código:

CONSOLE_SCREEN_BUFFER_INFO csbi; int ret; ret = GetConsoleScreenBufferInfo(GetStdHandle( STD_OUTPUT_HANDLE ),&csbi); if(ret) { printf("Console Buffer Width: %d/n", csbi.dwSize.X); printf("Console Buffer Height: %d/n", csbi.dwSize.Y); }

Da el tamaño del buffer. El único problema es que dwSize.Y no es realmente el tamaño de la pantalla (300 aquí en lugar de 25 líneas). Pero dwSize.X coincide con el número de la columna. Solo necesita windows.h para funcionar.

Cómo comprobar ymax y xmax en una ventana de la consola, en Windows, usando plain c?

Hay esta pieza de código para Linux:

#include <stdio.h> #include <sys/ioctl.h> int main (void) { struct winsize max; ioctl(0, TIOCGWINSZ , &max); printf ("lines %d/n", max.ws_row); printf ("columns %d/n", max.ws_col); }

Ahora me pregunto cómo puedo hacer lo mismo con Windows. Intenté winioctl.h pero no define struct winsize ni ningún otro con un nombre similar.

¿Algun consejo? Gracias.

PD. En Linux también puedes encontrar el tamaño de la consola usando getenv("LINES"); . ¿Hay una variable similar en Windows?

PPS. Además, siempre hay ncurses.h , supongo que funcionan ambos sistemas, pero lo estoy evitando debido a conflictos con otras bibliotecas que tengo.

PPPS. Esta pregunta aquí ¿ Cómo obtener el ancho del terminal en C? tiene muchos consejos, así que no hay necesidad de repetir eso.


Esto imprime el tamaño de la consola, no el buffer:

#include <windows.h> int main(int argc, char *argv[]) { CONSOLE_SCREEN_BUFFER_INFO csbi; int columns, rows; GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); columns = csbi.srWindow.Right - csbi.srWindow.Left + 1; rows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; printf("columns: %d/n", columns); printf("rows: %d/n", rows); return 0; }

Este código funciona porque srWindow "contiene las coordenadas del búfer de la pantalla de la consola de las esquinas superior izquierda e inferior derecha de la ventana de visualización" y la estructura SMALL_RECT "especifica las filas y columnas de las celdas de caracteres del búfer de pantalla" según MSDN. Restaba los lados paralelos para obtener el tamaño de la ventana de la consola. Como obtuve 1 menos que el valor real, agregué uno.