2011-08-24 26 views
5

estoy usando gcc en ubuntu .so, puedo compilar y ejecutar en el terminal de. Pero en un concurso de programación en línea, requieren la salida como se muestra en el diagrama.¿Cómo podría lograr gotoxy() en gcc

required output

Por eso, si uso TurboC lo puedo conseguir usando conio.h usando gotoxy() para obtenerformato de espiral de salida. Pero en Ubuntu, ¿cómo podría lograr esto?

+3

creo que se supone que averiguar antes de tiempo, donde cada número va (es decir, el orden de los números, de izquierda a derecha y de arriba a -fondo, y la cantidad de espacios intermedios), y luego solo muestra todo ese texto. Si fuera solo una cuestión de "ir a este lugar en la pantalla y escribir el número, ** no sería una pregunta interesante **; los concursos de programación tienen que ver fundamentalmente con el diseño, no con la implementación. –

Respuesta

4

utilizar la biblioteca ncurses.

He aquí un ejemplo, una adaptación de http://www.paulgriffiths.net/program/c/srcs/curhellosrc.html

#include <stdlib.h> 
#include <stdio.h> 
#include <curses.h> 

int main(void) { 
    WINDOW * mainwin; 

    /* Initialize ncurses */ 

    if ((mainwin = initscr()) == NULL) { 
     fprintf(stderr, "Error initialising ncurses.\n"); 
     exit(EXIT_FAILURE); 
    } 

    move(10, 15); 
    addch('X'); 
    refresh(); 

    getch(); 

    delwin(mainwin); 
    endwin(); 
    refresh(); 

    return EXIT_SUCCESS; 
} 

Más información está disponible aquí: http://invisible-island.net/ncurses/ncurses-intro.html#stdscr

1

Aparte de ANSI escape sequences es posible que desee investigar ncurses:

http://www.gnu.org/s/ncurses/

Todo en última instancia depende de las capacidades del terminal de ejecutar el programa, no el actual anfitrión, lengua, o la biblioteca. Considere lo que sucede redirigiendo la salida del programa a un archivo o a una impresora.

conio.h La API tiene más que ver con una consola fija, con los sistemas Unix como generalmente se trata con terminales que pueden ser más variados, como los X-Terminals redimensionables.

1

Determinar el número de líneas de producción que necesita. Asigne una matriz de "char *" con una entrada por línea de salida necesaria. Cuando coloque un número, use "realloc()" para aumentar el tamaño de la línea y llene desde el extremo anterior al nuevo con espacios (si es necesario); luego ponga su número en el lugar correcto en esa línea (en la memoria).

después de haber construir una matriz de cadena en la memoria; haga un ciclo for que imprima cada línea (y libere la memoria que asignó).

No es necesario "gotoxy()" o nada para controlar la posición del cursor.

5

Suponiendo porque es un concurso y que no quieren dependencias como ncurses usted podría tratar de hacerlo en la memoria.

2 Configurar matriz bidimensional de Char - líneas y columnas - dicen 24x80. Escriba su propia versión de gotoxy() que asigna valores a las celdas adecuadas. Cuando termine de trazar, imprima la matriz de líneas.

0

Dado que no ha llegado aún, sólo quería decir acerca de un ejemplo usando secuencias de escape ANSI como Steve-o mencionado.

void gotoxy(int x, int y) 
{ 
    printf("%c[%d;%df", 0x1B, y, x); 
} 

Lo tengo de here.

0x1B es hexadecimal para 27 en decimal y es el ASCII para ESC.Las secuencias de escape comienzan con él

%m;%nf mueve el cursor a la fila n, columna m.

Las secuencias de escape ANSI se utilizan "to control the formatting, color, and other output options on video text terminals"

Cuestiones relacionadas