Problema con system("clear") [resuelto]

Iniciado por JavierScars, 3 Enero 2016, 03:34 AM

0 Miembros y 1 Visitante están viendo este tema.

JavierScars

Alguien me dice porque cada vez que hago system("clear") me pasa esto?  :-\
Sistema operativo Lubuntu y terminal LXTerminal...

Ya vi que es normal... Si la quiero limpiar como tal completamente debo usar reset, pero no hay alternativa?
Usa lo malo de la vida a tu favor, escala montañas de problemas para deslizarte sobre soluciones, derrumba muros de decepciones para encontrar la libertar de la felicidad,  y quema la leña del fracaso para calentarte con el éxito. Recuerda que sin la oscuridad la luz no brillaría tanto.

MAFUS

He modificado un poco tu programa y en Mint con el MATE Terminal solo me da un problema: cuándo maximizo la ventana no muestra todo el tablero y el menú hasta que se pulsa una tecla, pero eso ya es del funcionamiento del propio terminal.

Ahí va el código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define alto 25
#define ancho 25

void escribir(int pasos);
void imprimir_tablero();
void imprimir_datos_lapiz();
void pintar_casilla();

typedef enum {
    NORTE,
    ESTE,
    SUR,
    OESTE
} direccion_t;

typedef enum {
    LEVANTADO,
    BAJADO
} estado_t;

struct {
    unsigned x;
    unsigned y;
    direccion_t direccion;
    estado_t estado;
} lapiz;

int plano[alto][ancho];

int main(void) {
    int op = 0;
    int pasos;
   
    while (op != 9) {
        system("clear");
        imprimir_datos_lapiz();
        imprimir_tablero();
        puts("");
        puts("Introduzca una opcion");
        puts("1) Levantar lapiz");
        puts("2) Bajar lapiz");
        puts("3) Girar a la derecha");
        puts("4) Girar a la izquierda");
        puts("5) Desplazar lapiz");
        puts("9) Salir");
        printf("\n>>");
        scanf("%d", &op);
        while(getchar() != '\n');
       
        switch (op) {
            case 1:
                lapiz.estado = LEVANTADO;
                pintar_casilla();
                break;
            case 2:
                lapiz.estado = BAJADO;
                pintar_casilla();
                break;
            case 3:
                if(lapiz.direccion == OESTE)
                    lapiz.direccion = NORTE;
                else
                    lapiz.direccion++;
                break;
            case 4:
                if(lapiz.direccion == NORTE)
                    lapiz.direccion = OESTE;
                else
                    lapiz.direccion--;
                break;
            case 5:
                printf("Introduzca la cantidad de pasos que desea dar: ");
                scanf("%d", &pasos);
                while(getchar() != '\n');
                escribir(pasos);
                break;
            case 9:
                printf("Gracias por usar el programa! \n");
                break;
        }
    }
    return 0;
}

void pintar_casilla() {
    plano[lapiz.y][lapiz.x] = lapiz.estado;
}

void escribir(int pasos) {
    switch(lapiz.direccion) {
        case NORTE:
            for(; pasos > 0; pasos--) {
                if(lapiz.y > 0) {
                    lapiz.y--;
                    pintar_casilla();
                }
            }
            break;
        case ESTE:
            for(; pasos > 0; pasos--) {
                if(lapiz.x < (ancho - 1)) {
                    lapiz.x++;
                    pintar_casilla();
                }
            }
            break;
        case SUR:
            for(; pasos > 0; pasos--) {
                if(lapiz.y < (alto-1)) {
                    lapiz.y++;
                    pintar_casilla();
                }
            }
            break;
        case OESTE:
            for(; pasos > 0; pasos--) {
                if (lapiz.x > 0) {
                    lapiz.x--;
                    pintar_casilla();
                }
            }
            break;
    }
}

void imprimir_datos_lapiz() {
    char direcc[6];
    char est[10];
   
    switch(lapiz.direccion) {
        case 0:
            strcpy(direcc, "NORTE");
            break;
        case 1:
            strcpy(direcc, "ESTE");
            break;
        case 2:
            strcpy(direcc, "SUR");
            break;
        case 3:
            strcpy(direcc, "OESTE");
            break;
    }
   
    if(!lapiz.estado)
        strcpy(est, "LEVANTADO");
    else
        strcpy(est, "BAJADO");
   
    printf("Lapiz: %9s | %5s | x = %i | y = %i\n", est, direcc, lapiz.x, lapiz.y);
}

void imprimir_tablero() {
    int i, j;
   
    for (i = 0; i < alto; i++) {
        for (j = 0; j < ancho; j++) {
            if(lapiz.y == i && lapiz.x == j )
                printf("I");
            else if(plano[i][j] == 0)
                printf(" ");
            else
                printf("x");
        }
        puts("");
    }
}

JavierScars

Genial! Aunque no consoco un par de cosas de ese código en esencia es el mismo creó, aunque mas intuitivo que el mio ;-)

el mío ya funciona bien o al menos se quitó el límite de 15... No se porque un libro mandaría a programar un array de 50x50 si no cabe en una terminal... :¬¬
Usa lo malo de la vida a tu favor, escala montañas de problemas para deslizarte sobre soluciones, derrumba muros de decepciones para encontrar la libertar de la felicidad,  y quema la leña del fracaso para calentarte con el éxito. Recuerda que sin la oscuridad la luz no brillaría tanto.