Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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

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 1

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.

Editado por isrnick

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

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.

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.

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






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

×