Ir ao conteúdo
  • Cadastre-se
gustavo45jp

Criar borda em C

Recommended Posts

Preciso implementar bordas em um programa em C, mas não é permitido o uso de função.
Fiz o uso do for assim:

 

 for(i=0; i<80; i++){
       printf("%c", 177);

}

Mas não consigo colocar as opções do programa dentro da borda, elas ficam abaixo.

Segue a imagem em anexo

programa.png

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem usar função só imprimindo linha por linha mesmo:

#include <stdio.h>

int main()
{
    int i, j;
    
    for(i=0; i<80; i++){
        printf("%c", 177);
    }
    
    for(j=0; j<9; j++){
        printf("%c", 177);
        for(i=0; i<78; i++){
            printf(" ");
        }
        printf("%c", 177);
    }
    
    printf("%c", 177);
    for(i=0; i<26; i++){
        printf(" ");
    }
    printf("Digite o nome do cliente:");
    for(i=0; i<27; i++){
        printf(" ");
    }
    printf("%c", 177);

    for(j=0; j<9; j++){
        printf("%c", 177);
        for(i=0; i<78; i++){
            printf(" ");
        }
        printf("%c", 177);
    }
    
    for(i=0; i<80; i++){
       printf("%c", 177);
    }
    
    return 0;
}

 

Pra fazer algo mais melhor precisaria usar alguma biblioteca como a curses.h...

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, MassakiMsk disse:

@isrnick Faltou as quebra de linha só.

Ah sim, é que o prompt aqui estava limitado a 80 caracteres por linha, então passa pra próxima linha quando imprime o ultimo caractere...

 

Aqui uma versão com quebras de linha que funciona com limite de 80 caracteres ou maior:

 

#include <stdio.h>

int main()
{
    int i, j;
    
    for(i=0; i<79; i++){
        printf("%c", 177);
    }
    printf("\n");
    
    for(j=0; j<9; j++){
        printf("%c", 177);
        for(i=0; i<77; i++){
            printf(" ");
        }
        printf("%c\n", 177);
    }
    
    printf("%c", 177);
    for(i=0; i<26; i++){
        printf(" ");
    }
    printf("Digite o nome do cliente:");
    for(i=0; i<26; i++){
        printf(" ");
    }
    printf("%c\n", 177);

    for(j=0; j<9; j++){
        printf("%c", 177);
        for(i=0; i<77; i++){
            printf(" ");
        }
        printf("%c\n", 177);
    }
    
    for(i=0; i<79; i++){
       printf("%c", 177);
    }
    printf("\n");
    
    return 0;
}

Diminuí o tamanho de cada linha pra 79 caracteres pra incluir o '\n' no final.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderiam me explicar por que a borda superior não aparece, e por que quando escolho qualquer uma das opções a borda some.
Segue em anexo as imagens..

 

 

 

 

 

 

 

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

int main()
{
    int h, j;
    int escolha;
    char nome[26];
    int mesa, produto, cerveja, refri, tiragosto;
    int i;

    float valor, soma1, soma2, soma3, total, qtde;
    mesa=0;
    i=0;
    qtde=0;
  
    
    for(h=0; h<79; h++){
        printf("%c", 177);
    }
    printf("\n");
    
    for(j=0; j<9; j++){
        printf("%c", 177);
        for(h=0; h<77; h++){
        printf(" ");
        }
        printf("%c\n", 177);
    }
    
    printf("%c", 177);
    for(h=0; h<26; h++){
        printf(" ");
    }
          while(true){
        printf("\t\t\n\t\t      1-Cadastro \t\t\n\t\t      2-Conta \t\t\n\t\t      3-Soma \t\t\n\t\t      4-Sair ");
        scanf("%i",&escolha);
        system("cls");
        switch(escolha){
        
        case 1:
            printf("\nDigite o nome do cliente:");
            scanf("%s",&nome);
    
            fflush(stdin);
    
            printf("Digite o numero da mesa:");
            scanf("%i",&mesa);
            system("cls");
            break;
        
            
        case 2:
        for(i=0; i<3; i++){
    
    
        printf("Informe o que foi consumido pelo cliente: 1-Cerveja 2-Tira Gosto 3-Refrigerante");
        scanf("%i",&produto);
        
            
        if(produto == 1){
            printf("Informe a quantidade de cervejas consumidas:");
            scanf("%i",&cerveja);
            soma1= cerveja * 7;
        }
        if(produto == 3){
            printf("Informe a quantidade de refrigerantes consumidos:");
            scanf("%i",&refri);
            soma2= refri * 5;
        }
        if(produto == 2){
            printf("Informe a quantidade de tira gosto consumidas:");
            scanf("%i",&tiragosto);
            soma3= tiragosto * 15;
        }
    
            }
        
            qtde= soma1 + soma2 + soma3;
        
            system("cls");
            break;
            
            case 3:
            printf("Nome do Cliente: %s\n",nome);
            printf("Mesa: %i\n",mesa);
            printf("O valor da conta foi de : R$ %.2f\n",qtde);
            break;
                    
            case 4:
                system("cls");
                exit(0);
                
                
            default:
                printf("Opcao invalida!");
                break;
        }
        
    }
    printf("\t\t\t      %c", 177);
    printf("\t\t\t      %c", 177);
    for(h=0; h<26; h++){
        printf(" ");
       
    }
    printf("%c\n", 177);

    for(j=0; j<9; j++){
        printf("%c", 177);
        for(h=0; h<77; h++){
            printf(" ");
        }
        printf("%c\n", 177);
    }
    
    for(h=0; h<79; h++){
       printf("%c", 177);
    }
    printf("\n");
    
    return 0;
}

trabalho1.png

trabalho2.png

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para postar código no fórum usa a tag CODE apertando o botão <> no topo do campo de resposta, assim você mantém a formatação do seu código e evita que o fórum faça alterações nele.

 

Se você quer que a borda sempre apareça usando esse método você vai precisar imprimir ela todas as vezes, e observe que o meu código serve apenas para 1 caso específico, onde tem apenas 1 linha de texto na tela, e essa linha tem exatamente 25 caracteres, se você quer fazer várias telas diferentes, vai precisar fazer um código pra cadas tela, que vai depender do número de linhas e do número de caracteres em cada linha, e preencher o restante do espaço da tela com espaços em branco e a borda.

 

Essa método é péssimo para fazer isso, se pelo menos pudesse usar funções dava pra melhorar um pouco, eu nem entendo porque aprender a fazer isso da pior maneira possível, quando existem bibliotecas prontas... Aliás nesse caso seria melhor partir pra fazer o programa usando uma interface gráfica ao invés de ficar no prompt.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja, eu fiz essa versão com funções e sem nenhuma biblioteca extra:

 

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

//Abaixo são definidas as dimensões da "janela"
#define MAXL 21
#define MAXC 81

void limpajanela(char janela[MAXL][MAXC]){
    int i, j;
    
    for (i=0; i<MAXL; i++){
        for (j=0; j<MAXC; j++){
            if (i==0 || i==MAXL-1 || j==0 || j==MAXC-3)
                janela[i][j] = 177;
            else
                janela[i][j] = ' ';
            if (j==MAXC-2)
                janela[i][j] = '\n';
            if (j==MAXC-1)
                janela[i][j] = '\0';
        }
    }
    
}

void imprimejanela(char janela[MAXL][MAXC]){
    int i, j;
    
    for (i=0; i<MAXL; i++){
        printf("%s", janela[i]);
    }
}

//Fucao para adicionar uma texto a uma posicao da janela, tal que seu primeiro
//caractere e posicionado na linha l e na coluna c:
int textoposicaoLC(char janela[MAXL][MAXC], int l, int c, char texto[MAXC]){
	int i;
	system("cls");
	if (l < 0 || l > MAXL-1 || c < 0 || c > MAXC-3)
	    return 0;  //Retorna 0 (false) se a posicao estiver fora da borda
	for (i=0; c+i < MAXC-2 && texto[i] != '\0'; i++){
		janela[l][c+i] = texto[i];
	}
	return 1; //Retorna 1 (true) quando o texto e adicionado a janela com sucesso
}

int main()
{
    //Abaixo e criada a matriz para conter os caracteres da janela que deverá ser
    //preenchida com a borda, caracteres em branco e textos nas posições apropridas:
	char janela[MAXL][MAXC];
    
    //Gera a janela limpa, apenas com a borda:
    limpajanela(janela);
    
    //Adiciona um texto a uma posição (linha e coluna) da janela:
    textoposicaoLC(janela, 10, 27, "Digite o nome do cliente:");
    
    //E finalmente imprime a janela usando a matriz de caracteres completa,
    //já contendo o texto:
    imprimejanela(janela);

    return 0;
}

 

Esse método é melhor pois permite adicionar textos a janela sem precisar fazer várias contas. E até daria pra fazer sem funções, mas o código ficaria extenso demais, com vários trechos repetidos, sendo que não há necessidade.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém pode me ajudar com isso aqui ?
 

#include <stdio.h>

main(){
    int i, j;
    
    for(i=1; i<110; i++){
        printf("#");
    }
    
    for(j=0; j<13; j++){
        printf("#");
        for(i=0; i<108; i++){
            printf(" ");
        }
        printf("#\n");
    }
    
    for(i=0; i<26; i++){
        printf(" ");
    }
    
    for(i=0; i<26; i++){
        printf(" ");
    }
    
    printf("#\n");

    for(j=0; j<13; j++){
        printf("#");
        for(i=0; i<108; i++){
            printf(" ");
        }
        printf("#\n");
    }
    
    for(i=0; i<110; i++){
       printf("#");
    }
    
}

 

Após compilar, acontece esse problema, esses dois caracteres aparecem fora da ordem, já tentei de tudo um pouco, mas não consegui resolver ele de nenhum jeito.
 

image.thumb.png.55760ceb2b62ddc44b3d91d20b002e9a.png

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Preciso que a borda forme um retângulo, sem nenhuma abertura.
Outro detalhe é que quando a compilação abre sem ser maximizada, fica assim:

 

image.thumb.png.5c4c54d43e5c05d4df69c627286de585.png

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nesse código você precisa de um FOR para o topo, um FOR para as linhas com outro FOR para os espaços da linha e por último um FOR para a base que é igual ao do topo. 

Eu não vou conseguir colocar código aqui porque no site mobile não encontro o botão CODE, mas seu código está parcialmente certo, só sobrando FOR's desnecessários. 

Só um detalhe, faltou uma quebra de linha (\n) depois do FOR do topo, por isso ficou errado com tela pequena. 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@Godlander Olá. Vou postar um exemplo mas fazendo uso de uma função e com formatação um pouco diferente:

#include "stdio.h"
#include "windows.h"

#define go irParaXY

void irParaXY(int x, int y)
{
    COORD p = { x, y };
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), p);
}

void desenharCampo()
{
    int i;

    for (i = 1; i < 20; i++)
    {
        go(2, i);
        puts("\xBA");
        go(59, i);
        puts("\xBA");
    }

    for (i = 3; i < 59; i++)
    {
        go(i, 1);
        puts("\xCD");
        go(i, 20);
        puts("\xCD");

    }

    go(59, 1);
    puts("\xBB"); // canto superior direito
    go(2, 20);
    puts("\xC8"); // inferior esquerdo
    go(2, 1);
    puts("\xC9"); // canto superior esquerdo
    go(59, 20);
    puts("\xBC"); // inferior direito
}


int main()
{
    desenharCampo();

    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@Godlander Olá. Segue um forma p resolver seu problema:

#include <stdio.h>

void desenhar(int, int);

int main(void) {

    desenhar(150, 100);

    return 0;
}

void desenhar(int largura, int altura) {

    int i, j;

    altura /= 4;
    largura /= 2;

    for (i = 0; i < altura; i++) {
        for (j = 0; j < largura; j++) {
            if (i == 0 || i == altura - 1) {
                printf("#");
            } else if (j == 0 || j == largura - 1) {
                printf("#");
            } else {
                printf(" ");
            }
        }
        printf("\n");
    }
}

Já quanto a abrir maximizada a janela tente algo assim:

system("mode con:lines=30 cols=110");

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×