
kgin
-
Posts
386 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
posts postados por kgin
-
-
poste o que você já fez para nos podermos ajudar.
-
@Um mero usuário Para você utilizar a ncurses você precisa iniciá-la primeiro dessa maneira.
initscr(); /* Inicia a ncurses */
depois de iniciada você pode escrever ou pegar algo da saída padrão com as funções.
/* Funções de saida */ printw(); /* Funciona igual a printf() */ addch(); addstr(); /* Funções de entrada */ scanw(); /* Funciona igual a scanf() */ getch(); getstr();
você também não precisa incluir o cabeçalho stdio.h a ncurses inclui automaticamente ele e o termios.h.
Quando você utilizar uma das funções de saída (como printw()) você tem que utilizar a função refresh()
refresh(); /* Atualiza as informções do terminal */
Quando o seu programa terminar você tem que chamar a função endwin()
endwin(); /* Finaliza a ncurses */
Ela vai restaurar todas as cagadas que você fez com o termios.h, por isso eu não recomendo a solução do @Lucca Rodrigues porque ela mexe direto com as configurações do terminal.
Um programa básico com ncurses é assim.
#include <ncurses.h> int main(void) { initscr(); /* Inicia a ncurses */ printw("Ola mundo!\n"); refresh(); /* Atualiza o terminal */ getchar(); /* Espera a tecla enter */ endwin(); /* Finaliza a ncurses */ return(0); }
Para compilar você utiliza a linha de comando
gcc NOME_DO_ARQUIVO.c -o NOME_DO_EXECUTAVEL -Wall -lncurses
para um tutorial bem mais completo e detalhado de uma olhada nesse site.
https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/
Boa sorte!
-
1
-
-
10 minutos atrás, TsunaY disse:
@kgin Não, a unica coisa que sei é que tem que usar Struct
Sim você vai ter que usar estruturas (struct) e vetores para fazer esse algoritmo.
você deveria fazer algo assim para começar
#include <stdio.h> struct info_aluno { char nome[60]; int ira; int ano; }; int main(void) { struct info_aluno aluno; /* Pega as informações do aluno */ printf("Digite o nome do aluno\n"); fgets(aluno.nome, 60, stdin); printf("Digite o IRA do aluno\n"); scanf("%d%*c", &aluno.ira); printf("Digite o ano de inicio da graduacao\n"); scanf("%d%*c", &aluno.ano); /* Mostra as informações do aluno */ printf("Nome do aluno:%s", aluno.nome); printf("IRA:%d\n", aluno.ira); printf("Ano:%d\n", aluno.ano); getchar(); /* Pausa o programa */ return(0); }
-
1
-
-
@TsunaY Mas assim fica meio difícil de ajudar, você já escreveu alguma coisa?
-
1
-
-
@TsunaY Qual seria a sua duvida?
1 minuto atrás, thefill disse:E uma outra pergunta, o que seria esse "IRA"? Poderia me explicar?
índice de rendimento acadêmico (IRA).
-
1
-
-
@Leoprog você já estudou alguma coisa sobre a linguagem C?
eu fiz um pedaço do que está pedindo para você ter uma ideia de como é.
#include <stdio.h> #include <stdlib.h> //------------------------------------------------------------- // Protótipos das funções int menu(); // As funções abaixo devem imprimir o resultado das operações // realizadas com os números passados por parâmetro. void soma(int num1, int num2); void subtracao(int num1, int num2); void multiplicacao(int num1, int num2); void divisao(int num1, int num2); // Imprime a tabuada conforme exercícios anteriores void tabuada(int inicio, int fim); //------------------------------------------------------------- // Função main int main() { int num1, num2; int opcao = 0; opcao = menu(); printf("voce selecionou a opcao: %d\n", opcao); printf("digite o primeiro numero da operacao\n"); scanf("%d%*c", &num1); printf("digite o segundo numero da operacao\n"); scanf("%d%*c", &num2); switch (opcao) { case 1: soma(num1, num2); break; case 2: subtracao(num1, num2); break; case 4: multiplicacao(num1, num2); break; } // Utilizar o laço while para executar enquanto // não seja digitada a opção sair. // Criar um menu utilizando a variavel opção para escolher // Qual função deverá chamar. // Solicitar os dois numeros que serão passados por parâmetro return 0; } //------------------------------------------------------------- // Implementação da função menu int menu(){ int opcao; // Declara a variável que será utilizado dentro da função // Imprime as opções do menu. printf("01 - Soma\n"); printf("02 - Subtracao\n"); printf("03 - Divisao\n"); printf("04 - Multiplicacao\n"); printf("05 - Tabuada\n"); printf("09 - Sair\n\n"); printf("Informe a opcao: "); // Solicita a opção. scanf("%d",&opcao); // Lê o valor digitado pelo usuário. return opcao; // Retorna o valor para quem chamou // a função menu. } //------------------------------------------------------------- // Implementar as demais funções conforme os protótipos apresentados. void soma(int num1, int num2){ printf("A soma dos numeros informados eh: %d", num1 + num2); } void subtracao(int num1, int num2){ printf("A subtracao dos numeros informados eh: %d", num1 - num2); } void multiplicacao(int num1, int num2){ printf("A multiplicacao dos numeros informados eh: %d", num1 * num2); }
Depois e só completar o resto das operações e colocar o loop while na função main()
-
-
2 horas atrás, Um mero usuário disse:
só nao entendi o que aquelas bibliotecas (ctype.h e unistd.h) fazem...
ctype trabalha com caracteres, faz conversões de maiúscula para minuscula (e vice versa), checa se um caractere e um numero ou um gráfico (caracteres gráficos !,@,°,E,...).
já o unistd está aí só para dar um delay com a função usleep (eu poderia ter usado sleep() também).
-
1
-
-
Uma alternativa se você utilizar linux seria a ncurses.
exemplo
#include <ncurses.h> #include <ctype.h> #include <unistd.h> struct vetor2 { int x, y; }; int main(void) { int tecla; struct vetor2 vetor = {1, 1}; initscr(); /* inicia a ncurses */ noecho(); /* Não deixa o caractere pressionado aparecer */ cbreak(); /* Não espera que seja pressionado enter */ do { clear(); /* Apaga a tela */ printw("Utilize as teclas WASD para se mover, e X para sair\n"); tecla = getch(); /* pega uma tecla */ switch (toupper(tecla)) { case 'A': if (vetor.x > 0) { vetor.x--; } else { vetor.x = 79; } break; case 'D': if (vetor.x < 79) { vetor.x++; } else { vetor.x = 0; } break; case 'W': if (vetor.y > 0) { vetor.y--; } else { vetor.y = 20; } break; case 'S': if (vetor.y < 20) { vetor.y++; } else { vetor.y = 0; } break; } move(vetor.y, vetor.x); printw("#"); refresh(); /* Atualiza a tela */ usleep(50000); /* Faz uma pausa de 50 msec */ } while (toupper(tecla) != 'X'); endwin(); /* finaliza a ncurses */ return(0); }
para ver o funcionamento do programa.
-
2
-
-
Não seria melhor você deixar a função de cadastrar só para cadastrar?
Dessa maneira.
#include <stdio.h> #include <stdlib.h> struct dados_produto { int id; int quantidade; float preco; }; void salvarCadastro(struct dados_produto *produto); int cadastraProduto(struct dados_produto *produto); int main(void) { struct dados_produto produto; if (cadastraProduto(&produto)) { char opcao; printf("id:%d\n", produto.id); printf("quantidade:%d\n", produto.quantidade); printf("preco:%.2f\n", produto.preco); printf("Salvar cadastro no arquivo\n"); printf("S\\N\n"); scanf("%c%*c", &opcao); if (opcao == 'S' || opcao == 's') { salvarCadastro(&produto); printf("Cadastro salvo no arquivo\n"); } } else { printf("Cadastro descartado\n"); } getchar(); return(0); } void salvarCadastro(struct dados_produto *produto) { int contador; char buffer[256]; FILE *arq = fopen("Cadastros.csv", "r+"); if (arq == NULL) { arq = fopen("Cadastros.csv", "w+"); if (arq == NULL) { perror("Nao foi possivel de criar ou ler o arquivo"); exit(EXIT_FAILURE); } } /* Pula todos os cadastros */ do { fgets(buffer, 256, arq); } while (!feof(arq)); /* Salva o cadastro */ fprintf(arq, "%d,%d,%.2f\n", produto->id, produto->quantidade, produto->preco); fflush(arq); fclose(arq); } int cadastraProduto(struct dados_produto *produto) { struct dados_produto tmp; char opcao; do { printf("Digite o id do produto\n"); scanf("%d%*c", &tmp.id); printf("Digite a quantidade de produtos\n"); scanf("%d%*c", &tmp.quantidade); printf("Digite o preco do produto\n"); scanf("%f%*c", &tmp.preco); printf("O cadastro esta correto\n"); printf("S\\N\n"); scanf("%c%*c", &opcao); if (opcao == 'S' || opcao == 's') { *produto = tmp; printf("Cadastro feito com sucesso!\n"); return(1); } printf("Cadastrar novamente?\n"); printf("S\\N\n"); scanf("%c%*c", &opcao); } while (opcao == 'S' || opcao == 's'); return(0); }
Assim fica mais simples para remover um cadastro depois.
-
Tudo que você coloca no header (.h) em c vai ser visível quando você incluir em outro arquivo, então sim você colocar suas estruturas e declarações de funções e variáveis no .h se você quiser que seja visível.
-
1
-
-
@RenanDias92 Mas os valores tem que ser gerados aleatoriamente ou o programa poderia aceitar que o usuário digitasse qualquer numero menos os números anteriores?
Você já fez alguma coisa?
-
1
-
-
2 horas atrás, souza souza00 disse:
acho que voce nao entendeu a minha duvida, eu so quero saber o porque ele ta dando o erro que eu postei o print,
Olha aqui no meu compilador
Que está basicamente dizendo que na linha 189 do arquivo calc.cpp
while(value > 0) convert(value % 10, digits, (*count)++); value = value / 10; }
Seu while está sem a chave do bloco '{'
e que na linha 123 do mesmo arquivo (calc.cpp) você está utilizando uma variável chamada digit no loop for que não foi declarada
for(digit = 0; digit < 8; digit++){ numeros[x] = num % 10; num /= 10; }
e que a sua função
void CpuSthefani::converterIntToDigits(int value, Digit *digits, int *count)
você não fechou o bloco da função com a chave '}'
-
@souza souza00 Pra mim esse seu código não tem salvação, mas se vocẽ ainda quiser tentar recuperar a maior parte dos erros estão no método
void CpuSthefani::converterIntToDigits(int value, Digit *digits, int *count)
na linha 118 do arquivo calc.cpp.
Você não fechou o método com a chave } nem utilizou um bloco {} no while, e no for você está utilizando um ponteiro para contar deveria se uma variável do tipo inteira (int).
Eu fiz um código demonstrado um display em C (avisando novamente eu não sei C++) talvez seja útil.
#include <stdio.h> #include <stdlib.h> /* Informações internas do display */ /* Seria os campos privados do objeto */ struct info_display { int max_buffer; char *buffer; }; /* Metodos do objeto */ void limpaDisplay(struct info_display *display); /* * Limpa todos os caracteres no display */ void iniciaDisplay(struct info_display *display, int max_caracteres); /* * Inicia o display com a quantidade de caracteres suportados */ void atualizaDisplay(struct info_display *display); /* * Mostra o display para o usuario */ void adicionaCaractereDisplay(struct info_display *display, char caractere); /* * Coloca caracteres no display */ void apagaUltimoCaractereDisplay(struct info_display *display); /* * Remove o ultimo caractere adicionado no display */ void liberaDisplay(struct info_display *display); /* * Apaga a memoria reservada para o display */ int main(void) { struct info_display display; iniciaDisplay(&display, 10); printf("Primeira atualizacao\n"); adicionaCaractereDisplay(&display, '1'); adicionaCaractereDisplay(&display, '3'); adicionaCaractereDisplay(&display, '7'); atualizaDisplay(&display); printf("Segunda atualizacao\n"); apagaUltimoCaractereDisplay(&display); adicionaCaractereDisplay(&display, 'C'); atualizaDisplay(&display); printf("Terceira atualizacao\n"); limpaDisplay(&display); atualizaDisplay(&display); liberaDisplay(&display); return(0); } void limpaDisplay(struct info_display *display) { int contador = 0; for (contador = 0; contador < display->max_buffer; contador++) { display->buffer[contador] = '\0'; } } void iniciaDisplay(struct info_display *display, int max_caracteres) { /* Reserva a quantidade caracteres maxíma do display */ display->buffer = malloc(sizeof(*display->buffer)*display->max_buffer); /* Se foi possivel reservar memoria então limpa o display */ if (display->buffer != NULL) { display->max_buffer = max_caracteres; limpaDisplay(display); } else { display->buffer = NULL; } } void atualizaDisplay(struct info_display *display) { int contador; /* Mostra uma linha */ for (contador = 0; contador < display->max_buffer; contador++) { putchar('-'); } putchar('\n'); /* Mostra o conteudo do display */ printf("%s\n",display->buffer); /* Mostra uma linha */ for (contador = 0; contador < display->max_buffer; contador++) { putchar('-'); } putchar('\n'); } void adicionaCaractereDisplay(struct info_display *display, char caractere) { int contador; for (contador = 0; contador < display->max_buffer-1 && display->buffer[contador]; contador++); if (contador < display->max_buffer-1) { display->buffer[contador] = caractere; display->buffer[contador+1] = '\0'; } } void apagaUltimoCaractereDisplay(struct info_display *display) { int contador; for (contador = 0; display->buffer[contador]; contador++); if (contador > 0) { display->buffer[contador-1] = '\0'; } else { display->buffer[contador] = '\0'; } } void liberaDisplay(struct info_display *display) { if (display->buffer != NULL) { free(display->buffer); } }
Defina o que cada objeto em seu programa faz, e coloque cada um para fazer a sua tarefa com perfeição.
-
4 horas atrás, souza souza00 disse:
postei em forma de pasta porque precisa abrir os 3 algoritmos pra calculadora funcionar.
você pode postar no replit ou no onlineGDB que fica mais cômodo para as pessoas visualizarem,
Agora vamos ao código eu não sei C++, mas eu acho que essa calculadora está com muitos objetos para uma calculadora.
Você já parou para pensar o que o objeto Cpu faz? esse objeto está fazendo serviço de outros como
virtual void setDisplay(Display * display) = 0;
Isso não deveria estar em Display? qual é o sentido de display ser configurado por outro objeto?
É aqui nesse trecho
virtual void setDecimalSeparator() = 0;
Pra que ter isso sendo que você poderia ter algo como
void addCharacterToDisplay(const character char); void removeLastCharacterDisplay();
-
1
-
-
5 minutos atrás, Midori disse:
O tópico é sobre C
Eu sei que é, mas tudo que eu vejo os outros postarem parece que vem do C++.
6 minutos atrás, Midori disse:mas como assim "tipificar estrutura"?
Acabei inventando palavra.
seria criar uma sinônimo ou alias, porque você acabou de criar uma estrutura pra que dar um nome que foge do escopo do proposito do mesmo?
-
1
-
-
Eu não sei se isso e alguma coisa do C++ ou porque eu ainda penso muito em pascal, mas pra mim não faz sentido tipificar uma estrutura.
typedef struct{ int codigo; char descricao[50]; char fornecedor[50]; int quantidade; float preco_venda; float preco_compra; }Produto;
Isso pra mim parece que meio que "oculta" o tipo, sendo que namespace de estruturas já são distintos de outros tipos de declaração em C.
outra coisa que eu acho estranho e fazer um cast quando está passando endereços(Ponteiros do tipo void) para ponteiros, o cast já não é automático? Ou em C++ e diferente?
prod = (Produto *)malloc(sizeof(Produto) * n);
Não seria melhor fazer assim?
prod = malloc(sizeof(*prod)*n);
Bem mais simples é claro.
-
2
-
-
Não seria melhor você postar o código?
Assim fica meio difícil de ajudar.
-
você teria que somar as notas dessa maneira.
/* Soma todas as notas */ for (contador = 0; contador < 10; contador++) { soma = soma+notas[contador]; }
troque a variável contador pela a variável que você estiver usando.
Depois e só dividir pela quantidade de notas.
/* Tira a media */ media = soma/10;
e mostrar
/* Mostra a media nota */ printf("a media e:%.2f", media);
tudo isso vai depois dessa linha
12 minutos atrás, casa1 disse:soma = 0;
media = 0;
Apague o resto até o return()
-
1
-
-
Para exemplificar o que o @mauro_b disse, seria dessa maneira.
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { char tabuleiro[10][10]; int bombas[10*10]; /* Mesmo tamanho do tabuleiro */ int linha, coluna; /* Inicia o tabuleiro */ for (linha = 0; linha < 10; linha++) { for (coluna = 0; coluna < 10; coluna++) { tabuleiro[linha][coluna] = '-'; /* Marca como vazio */ } } /* Inicia as bombas */ for (linha = 0; linha < 10*10; linha++) { bombas[linha] = linha; } /* Inicia o gerador de numeros aletorios com a data e hora do sistema */ srand(time(NULL)); /* Embaralha o local das bombas */ /* Utlizando o algoritomo Fisher–Yates */ for (linha = 0; linha < 10*10; linha++) { int indice, temporario = bombas[linha]; indice = rand()%(10*10); bombas[linha] = bombas[indice]; bombas[indice] = temporario; } /* Coloca 20 bombas no tabuleiro */ for (linha = 0; linha < 20; linha++) { /* bombas[linha]%10 = linha */ /* bombas[linha]/10 = coluna */ tabuleiro[bombas[linha]%10][bombas[linha]/10] = '*'; } /* Mostra o tabuleiro */ for (linha = 0; linha < 10; linha++) { for (coluna = 0; coluna < 10; coluna++) { printf("%c|", tabuleiro[linha][coluna]); } printf("\n"); } getchar(); return(0); }
-
2 horas atrás, Rodney Junior disse:
Eu estou com problema na leitura da descrição e do fornecedor, se eu coloco os números usando virgula para separar o preço ele não lê corretamente a parte de descrição e fornecedor nem o preço de venda, ai vira uma bagunça e sai errado, porém se eu coloco com ponto ele lê corretamente. Queria saber como corrigir isso pra ele executar normalmente tanto com um quanto com o outro
Se o seu sistema operacional estiver configurado para português e só você usar a função setlocale.
Exemplo
setlocale(LC_ALL, "");
Vai configurar o programa para aceitar a região atual do sistema.
É o seu programa está muito mal organizado, e eu acho que está saindo fora do enunciado.
Aqui está pedindo para fazer uma função que sirva como menu.
Em 04/05/2021 às 00:33, Rodney Junior disse:a. Procedimento para imprimir na tela um menu de opções, conforme abaixo, o qual lê do usuário a opção informada e a retorna:
Você escreveu o menu direto na função main() eu acho que está errado.
Eu recomendo você começar de novo!
SpoilerNinguém faz isso, eu acho que é um esforço desnecessário da minha parte (;一_一)
Um exemplo inicial de como seria o programa seguindo o enunciado.
-
1
-
-
6 horas atrás, AsafeBernardoOficial disse:
@kgin não postei o enunciado pelo medo de estar entregando a questão de bandeja, como sei que no fórum ninguém faz trabalho para outros, decidi só botar o problema específico que eu estava enfrentando no código.
Eu já vi essa mesma questão varias vezes aqui no fórum, então eu acho que a chance de alguém copiar logo o seu é baixa.
-
@AsafeBernardoOficial Você ainda está inicializando o vetor de uma forma que só e valida em C++.
6 horas atrás, AsafeBernardoOficial disse:qtd_produto[5]={}
Coloque um 0 entre as chaves para ser valido em C.
O vetor total_itens[] não tem posições validas.
Eu recomendo você começar de novo.
Eu fiz um exemplo mas eu acho que ficou muito extenso para postar no fórum, então eu vou deixar no replit.
-
Lembrei de alguns anos atrás que eu ligava esses monitores lcd na porta paralela do computador para mostrar algumas informações inúteis e alguns desenhos.
Desse jeito.
-
1
-
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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
Código em C para passagens de avião, Pré-requisitos abaixo
em C/C#/C++
Postado
Poste o que você já fez para nos podermos ajudá-lo.