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
  • Autor do tópico
  • 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

    ×