Ir ao conteúdo
  • Cadastre-se

sannoy

Membro Pleno
  • Posts

    51
  • Cadastrado em

  • Última visita

  1. @edupiombini Olá, Preste atenção no nome das variáveis, Você está especificando errado. na hora de pegar os valores com scanf(). Você está recebendo os valores duas vezes na mesma variável. Recomendo testar com valores pré definidos primeiro depois fazer o input, E utilizar nomes maiores e mais claros em variáveis para evitar que você cometa estes erros. Espero ter lhe ajudado, até mais!
  2. @Luis Felipe Aparecido Olá, Mostrarei de uma forma mais simples, o seu código estava muito complicado para uma questão simples (Acontece todos já foram iniciantes em algo, alguma vez). Para fazer isto basta salvar o input utilizando fgets() e depois analisar o input e fazer o que @rjjj já sugeriu (exceto o sprintf() que neste caso não seria necessário), segue exemplo em código (Apenas um vetor): #include <stdio.h> #include <stdlib.h> int main() { int msize = 10000; // Tamanho máximo int xpos = 0; // Marca a posição do algarismo int vsize = 0; // Quantidade de digitos int va[msize]; // Vetor, OK... char a[msize]; // Guarda os valores de stdin // INPUT HERE: fgets(a, msize, stdin); // E se o input não for de numeros inteiros positivos? if (atoi(a) == 0 || atoi(a) < 0) return 1; // retorne 1 // Quantos digitos foram passados? Vamos ver: for (size_t i = 0; a[i]; i++) vsize++; vsize--; // Qual a posição do algarismo menos significativo? for (int i = vsize; i > -1; i--) { if((a[i] - '0') > 0) { // Adiciona o algarismo ao vetor na posição 0 va[0] = a[i] - '0'; xpos = i; // Marca a posição break; // Quebra o loop já achemos o algarismo } } // Vetor contem apenas o algarismo menos significativo? // Bora adicionar os outros digitos: for (int i = 1, j = 0; j < vsize; j++) { // Sem contar o algarismo é claro: if(a[j] != a[xpos]) { // Adicionar digito ao vetor: va[i] = ((int)a[j]) - ((int)'0'); i++; // Próxima posição do vetor } } // Imprimir digitos do vetor: for (int i = 0; i < vsize; i++) printf("%d", va[i]); // Execução completada com sucesso? return 0; // retorne 0 } Espero ter lhe ajudado, até mais!
  3. @Haslan Olá, Testei e funcionou: CSS: #interface img { border: 2px solid red; } HTML: <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <title>Tudo sobre Google Glass</title> <link rel="stylesheet" type="text/css" href="-estilo-css/-index-2-estilo.css"> </head> <body> <div id="interface"> <header id="cabecalho"> <hgroup> <h1>Google Glass</h1> <h2>A revolução do Google está chegando</h2> </hgroup> <figure> <img src="-imagens/ocu.png.png"/> </figure> Menu Principal - Home - Especificações - Fotos - Multimídia - Fale conosco </header> <hgroup><h3>Tecnologia > Inovações</h3> <h1>Saiba tudo sobre o Google Glass</h1> <h2>por Hendrio Leão</h2> <h3>Atualizado em 01/Out/2020</h3> </hgroup> <h2>O que é</h2> <p style="text-align: justify;text-indent: 50px;"><span style="font-weight: bolder;">O Google Glass</span> é um acessório em forma de óculos que possibilita a interação dos usuários com diversos conteúdos em realidade aumentada. Também chamado de Project Glass, o eletrônico é capaz de tirar fotos a partir de comandos de voz, enviar mensagens instantâneas e realizar vídeo&shy;confe&shy;rênci&shy;as. Seu lançamento está previsto para 2014, e seu preço deve ser de US$ 1,5 mil. Atualmente o Google Glass encontra-se em fase de testes e já possui um vídeo totalmente gravado com o dispositivo. Além disso, a companhia de buscas registrou novas patentes anti-furto e de desbloqueio de tela para o acessório. </p> <figure class="foto-legenda"> <img src="-imagens/cava.jpg" width="556px" height="auto" /> <figcaption> <h3>Google Glass</h3> Uma nova maneira de ver o mundo. </figcaption> </figure> </br><h2>Data de lançamento</h2> <p>Não há uma data específica e oficial para o dispositivo ser lançado, ainda. Pode ser que ele esteja disponível em demonstrações a partir de 2013, mas seu lançamento para as lojas fica para, pelo menos, 2014. </p> <h2>Especificações Técnicas</h2> <br>Tabela Técnica do Google Glass Mar/2013</br> Tela:Resolução equivalente a tela de 25"</br> Camera: 5MP para fotos / 720p para vídeos</br> Conectividade: Wi-Fi/ Bluetooth</br> Memória Interna: 12GB</br> </p> <h2>Como funciona</h2> <p>De acordo com fontes próximas do Google, os óculos vão contar com uma pequena tela de LCD ou AMOLED na parte superior e em frente aos olhos do usuário. Com o uso de uma câmera e GPS, você pode se situar, assim como selecionar opções com o movimento da cabeça </p> <h2>O que você pode fazer com o Google Glasses</h2> <p>O vídeo de divulgação do Google mostra que você pode se transformar em uma espécie de “super-<wbr/>humano”, já que o aparelho pode indicar a quantos metros você está de seu destino, se o metrô está aberto ou fechado, mostrar o clima, agenda e até mesmo permitir que você marque encontros apenas com comandos de voz. </p> [AQUI ENTRA UM VÍDEO] <h2>Outras Notícias</h2> Vídeo mais recente [AQUI ENTRA UM VÍDEO] <h2>Novidades no Glass</h2> <p style="text-align: justify;text-indent: 50px">O Google enfim revelou as especificações completas do Google Glass, e com ele uma surpresa ainda inédita no mercado: a gigante das buscas usará um sistema de áudio baseado na transdução por condução. Através das hastes dos óculos, o som será transmitido para o ouvido do usuário por meio de microvibrações em determinados ossos de sua cabeça, sem usar nenhum tipo de alto-falante. Além da surpresa do áudio, a tela montada a frente do olho do usuário também chamou atenção. Serão 640 x 360 pixels de resolução que, em proporção, equivaleria a um monitor de 25 polegadas de alta definição colocado a 2,5 metros de distância do espectador. </p> Copyright 2020 - by Hendrio Leão Instagran </div> </body> </html> Obs.: O tamanho em <img/> foi porque a imagem que usei era 4k não tinha uma menor... adicionado 5 minutos depois Ok, o CSS ficaria assim então: #interface > figure img { border: 2px solid red; } Espero ter lhe ajudado, até mais!
  4. @Haslan Olá, Use as ferramentas de desenvolvedor do navegador e inspecione a imagem. Precisaríamos do .html referente a esta página para poder te ajudar mais. Se você está utilizando <img/> para mostrar a imagem, basta colocar uma class="" ou id="" e depois utilizar o css para fazer o estilo usando o valor que passou para class="" ou id="". Exemplo: HTML <img id="imageID" src=""/> CSS #imageID { /*Stylesheets*/ } Espero ter lhe ajudado em algo, até mais!
  5. sannoy

    C Fazer string em c

    @mauro_b Olá, Apenas uma dica, não aconselho fechar sua cabeça desta forma, Em programação depende muito de lógica, vai de cada pessoa (programador e/ou estudante) buscar o que se encaixa melhor logicamente, as vezes pode ser while outras for. Ficar escolhendo por "fanatismo" ou simplesmente por gostar da sintaxe, algumas vezes pode dar uma dor de cabeça para outros dev's que lidarem com seu código no futuro. Bom, tem diversas formas mais simples(sem e com loop) para este caso, uma possibilidade seria a seguinte: char * l = buff; if((*l >= 'a' && *l <= 'z')||(*l >= 'A' && *l <= 'Z')) letter = *l; l = NULL; Claro que depende muito qual lógica você tem em mente mas, como @Loyanne Medrado não especificou que precisaria de um menu ou que repetisse o input, acho que neste caso ficaria aceitável.
  6. sannoy

    C Fazer string em c

    Quanta complicação para um problema simples... @Loyanne Medrado Olá, Segue exemplo em código de uma possível resolução: #include <stdio.h> int main() { int sizes = 50; // Tamanho maximo da string int xpos[sizes]; // Amazena as posições int count = 0; // Quantas ocorrencias char str[sizes]; // Recebera a string (as input) char buff[2]; // Recebera a letra (as input) char letter; // Amazenara a letra entre aA-zZ printf("\nDigite uma string: "); fgets(str, sizes, stdin); printf("\nDigite um caractere entre aA-zZ: "); fgets(buff, 2, stdin); // For loop para verificar a letra passada for(char * l = buff; *l; ++l) { if((*l >= 'a' && *l <= 'z')||(*l >= 'A' && *l <= 'Z')) { letter = *l; break; } } // For loop para verificar cada letra da string for (size_t i = 0; i < sizes; i++) { if (str[i] == letter) { xpos[count] = i; // Marca as posições count++; // Adiciona 1 a flag count } } if(count <= 0) { printf("\nNão econtrado!\n"); return 1; } printf("\nEncontrado %d ('%c') em:", count, letter); for (size_t x = 0; x < count; x++) printf(" %d", xpos[x]); printf("\n"); return 0; } Espero ter lhe ajudado, até mais!
  7. @RaphiaelGamer Sim, em C normalmente lidamos com funções tendo main() como função principal de todo programa. Até mesmo os comandos da linguagem C, por exemplo: fgets() e atof(), entre outros. São funções disponíveis por bibliotecas que incluímos no header do arquivo. Cada função pode ser definida para retornar um valor específico, um inteiro, caracteres, entre outros. No caso da função principal normalmente para casos desse tipo retornar 0, significa execução completada com sucesso. Espero ter lhe ajudado, até mais!
  8. @Davi Dutra Olá, Você está confundindo/bagunçando muito, a sua lógica pode não estar clara. Antes de sair escrevendo código tenha uma ideia clara ou melhor um plano do que você quer e/ou precisa. O que deu para compreender é que você precisa efetuar um saque, depois imprimir o valor do saldo após o saque e imprimir uma mensagem se o valor do saque for maior que o do saldo. Você criou a sua função main() tipo int logo você deveria utilizar o return para retornar um numero inteiro o que não acontece. Você está complicando o seu código com um if-else sendo que neste caso, você poderia utilizar apenas um if, como? passarei um código de exemplo: #include <stdio.h> #include <stdlib.h> int main () { double saldo = 1000; // valor disponivel na conta char buff[128]; // receberá o valor passado pelo usuário printf ("\n :: Digite o valor a ser sacado: "); // Não utilize scanf(). Acostume-se a utilizar // fgets() para está finalidade. // Troque: scanf ("%d", &ValorSaque); // por: fgets(var, size, stream); fgets(buff, 128, stdin); // Converta o valor do input para double, // Se o valor for invalido ficará igual a 0 double saque = atof(buff); // Verifica se o valor do saque é maior do que o // Disponivel em saldo if (saque > saldo) { printf("\nO valor do saque é maior do que o disponivel.\n"); return 1; } saldo -= saque; // Extrai o valor do saldo printf ("\n - Sacando: R$ %.2f\n - Saldo final: R$ %.2f\n", saque, saldo); system ("pause"); return 0; } Eu fiz um post sobre uma lógica bem similar, Recomendo olhar o post a seguir e tentar completar o código que passei: Espero ter lhe ajudado, até mais!
  9. @JoaoTesla Olá, Esse problema é bem simples, você apenas deu uma complicada desnecessária no seu código mas, como este problema tem diversas formas de resolução, passarei um exemplo (INCOMPLETO) de uma possível resolução, fica por sua conta alterar e tornar o mesmo funcional: /* Escreva um programa em C que simule um caixa eletrônico. Ao executar o programa deverá apresentar um menu com as opções: 1 - Inserir dinheiro (banco) 2 - Mostrar saldo (banco) 3 - Sacar dinheiro (cliente) 4 - Fim Funcionalidades: Inserir dinheiro (banco) - o banco insere dinheiro no caixa. O programa deverá perguntar o valor inserido e somar ao saldo atual no caixa eletrônico. Mostrar saldo (banco) - o banco solicita o valor do saldo atual no caixa eletrônico. Sacar dinheiro (cliente) - O cliente saca dinheiro do caixa. O programa deverá perguntar o valor desejado pelo cliente e este valor deverá ser subtraído do saldo do caixa. Caso o valor informado for maior que o saldo, o programa deverá informar ao cliente. Fim (banco) - o banco finaliza o caixa e o programa deverá mostrar o saldo atual do caixa. Obs.: Ao concluir as operações 1, 2 e 3 deverá retornar ao menu. */ #include <stdio.h> #include <stdlib.h> /* APENAS UM EXEMPLO, VOCÊ PODE FAZER DE DIVERSAS OUTRAS FORMAS, NÃO SOLUCIONAREI O SEU PROBLEMA POR COMPLETO APENAS UMA PARTE. LEIA O CÓDIGO BUSQUE entender O MESMO, TEM VÁRIAS ALTERAÇÕES QUE PODERIAM SER FEITAS. */ // Função para efetuar o depósito: int depositValue(double iv, double * p); // Função para efetuar o saque: int withdrawValue(double iv, double * p); int main() { // VARIAVEL COM SALDO ATUAL: double saldo = 0; /* LEVANDO EM CONTA QUE O CÓDIGO NECESSITA DE MAIS DE UM MENU UTILIZEI UMA VARIÁVEL TIPO 2D ARRAY PARA AS OPÇÕES DO MENU: OBS.: APENAS POR ESCOLHA, SE NÃO QUISER BASTA CRIAR OUTRA VÁRIA E ADAPTAR O RESTANTE DO MENU: */ char menu[2][32]; do { printf("\n1 - Inserir dinheiro (banco)"); printf("\n2 - Mostrar saldo (banco)"); printf("\n3 - Sacar dinheiro (cliente)"); printf("\n4 - Fim\n:: Entre uma opção: "); // NÃO UTILIZE O scanf() ALTERNATIVA? fgets(): fgets(menu[0], sizeof(menu[0]), stdin); if (atoi(menu[0]) == 1) { printf("\n- Valor: "); fgets(menu[1], sizeof(menu[1]), stdin); /* USE AQUI A FUNÇÃO RELATIVA PARA FAZER O DEPOSITO, CONVERTA O VALOR DE 'menu[1]' PARA DOUBLE. OBS.: PASSE O ENDEREÇO DA VARIÁVEL 'saldo', NÃO O VALOR. */ } else if (atoi(menu[0]) == 2) { printf("\n- Saldo atual: %.2f\n", saldo); } else if (atoi(menu[0]) == 3) { printf("\n- Valor: "); fgets(menu[1], sizeof(menu[1]), stdin); /* USE AQUI A FUNÇÃO RELATIVA PARA FAZER O SAQUE, CONVERTA O VALOR DE 'menu[1]' PARA DOUBLE. OBS.: PASSE O ENDEREÇO DA VARIÁVEL 'saldo', NÃO O VALOR. */ } else if (atoi(menu[0]) != 4) { printf("\nopção invalida!\n"); } } while(atoi(menu[0]) != 4); /* COLOQUE AQUI A MENSAGEM FINAL. */ return 0; } /* OBS.: COMO AMBAS FUNÇÕES ESTÃO UTILIZANDO PONTEIROS PARA ALTERAR O VALOR DA VARIÁVEL DESTINO, UTILIZE '*p' E NÃO APENAS 'p'; */ int withdrawValue(double iv, double * p) { if (iv <= 0) { printf("\nvalor invalido!\n"); return -1; } if (*p < iv) { printf("\nsaldo insuficiente.\n"); return -1; } // COLOQUE AQUI A OPERAÇÃO NECESSÁRIA PARA "SACAR". p = NULL; return 0; } int depositValue(double iv, double * p) { if (iv <= 0) { printf("\nvalor invalido!\n"); return -1; } // COLOQUE AQUI A OPERAÇÃO NECESSÁRIA PARA DEPOSITAR. p = NULL; return 0; } O ato f de estudar é muito importante! Espero ter lhe ajudado em algo, até mais!
  10. sannoy

    FraÇÃo em c

    @M3onique Olá, Para evitar a utilização da função scanf(), poderia ser assim: /* GOSTARIA QUE ME AJUDASSEM NO SEGUINTE PROBLEMA: Escreva um programa que calcule a soma de duas frações, fornecendo o resultado em forma de fração, seu programa deve verificar se as frações são válidas. FORMATO DE ENTRADA:Consiste de quatro números inteiros da forma a/b + c/d EXEMPLO: 12/5 + 8/7 FORMATO DE SAIDA:Consiste de uma fração seguida por um fim de linha. Deve imprimr ``entrada invalida!´´ caso uma das frações tenha denominador 0.obs:Imprimir sem as aspas. */ #include <stdio.h> #include <stdlib.h> int test(int i); int main() { char buff[4][56]; int x[2], y[2], r; for(size_t k = 0; k < 4; k++) { printf("\n%ld) Valor: ", (k+1)); fgets(buff[k], sizeof(buff[k]), stdin); if (k == 0) { x[0] = atoi(buff[k]); r = test(x[0]); } else if (k == 1) { x[1] = atoi(buff[k]); r = test(x[1]); } else if (k == 2) { y[0] = atoi(buff[k]); r = test(y[0]); } else if (k == 3) { y[1] = atoi(buff[k]); r = test(y[1]); } if(r != 0) k--; } printf("%d/%d\n", (x[0] + y[0]), (y[1] + x[1])); return 0; } int test(int i) { if (i == 0) { printf("entrada invalida!\n"); return -1; } return 0; } Fica até mais limpo o código, utilizando apenas um loop for(). Espero ter lhe ajudado em algo, até mais!
  11. @Igor Soares da Paixão Para ler utiliza-se o fopen("arquivo","r"), o exemplo que te mostrei acima de outra utilização do fflush(), faz o uso do mesmo. Já para o processo de tratamento dos dados o @arfneto já falou, até mais que o necessário. Leia com atenção e estude. Se tiver mais dúvidas eu outro usuários tentaremos te ajudar, até mais!
  12. @Igor Soares da Paixão Olá, Sugestões, Ok... Meu camarada, que dor!! ver está utilização do scanf() seguido de fflush(). Utilize está função como base: char * input(char *stgt, int smax){ FILE *f = stdin; int s; char *p; /* get max bytes or upto a newline */ for (p = stgt, smax--; smax > 0; smax--) { if ((s = fgetc(f)) == EOF) break; if (s == '\n') break; *p++ = s; } *p = 0; if (p == stgt || s == EOF) return NULL; return (p); } Agora você poderia utilizar está função input da seguinte forma: char variavelDestino[tamanho]; input(variavelDestino,tamanho); E pelo "Santo da Engenharia de Software" se é que o mesmo existe... Remova este monte de fflush(stdin), se quiser, utilize ele desta forma: fflush(); // Assim ele "flushará"/"limpará" todas as streams abertas Outra utilização de fflush(): (https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rtref/fflush.htm) FILE *stream; int ch; unsigned int result = 0; stream = fopen("mylib/myfile", "r"); while ((ch = getc(stream)) != EOF && isdigit(ch)) result = result * 10 + ch - '0'; if (ch != EOF) ungetc(ch,stream); fflush(stream); /* fflush desfaz o efeito da função ungetc */ printf("The result is: %d\n", result); if ((ch = getc(stream)) != EOF) printf("The character is: %c\n", ch); LEMBRANDO: Se for possível(caso não tenha limitações da universidade) NÃO utilize o scanf() como input de STRINGS para usuários, porque? No MÍNIMO se o usuário passar um valor maior que o do buffer pode causar um overflow. Espero ter lhe ajudado em algo, até mais!
  13. @Flavio Ferrarezi Olá, Você precisa apenas ler o nome do funcionário?! Se for basta utilizar fgets() e levar o nome para a sua estrutura. // Ficaria assim: // Obs.: Defina a estruturá dentro da função main() int main() { struct funcionarios { char nome[50]; float salario; } admin; // O fgets() utilizará o fgetc() para ler os caracteres // que você passar via stdin e irá retornar eles quando você // precionar enter. // Lembrando, que o nome terá uma nova linha '\n' no final. fgets(admin.nome, 50, stdin); /* * --- Restante do seu código -- **/ return 0; } DICA: Para deixar mais limpo a sua função main(), você poderia colocar este monte de if em uma função que retorne o resultado. Exemplo: float teste_salario(float *s); // Define a função para fazer o teste do salario int main() { /* * --- Restante do seu código -- **/ printf("\n:: Digite o salario: "); scanf("%f", &admin.salario); printf("\n- Imposto sera: %.2f\n", teste_salario(&admin.salario)); return 0; } float teste_salario(float *s) { float i = 0; // Valor que será retornado (imposto) if (*s <= 1637.11) { printf("Isento de imposto de renda"); i = 0; } /* * --- Restante do seu código -- **/ return (i); } Espero ter lhe ajudado em algo, até mais!
  14. @Cícero Santoss Olá, Neste caso, se você utilizar char ao invés de string você teria que apenas passar apenas um caractere. Se você pegar o seu código e passar apenas uma letra(char) ele irá executar mas, um nome com apenas uma letra... O uso de string no caso é porque você quer/precisa de múltiplos caracteres, por exemplo: "Cícero" 6 caracteres unidos, e não apenas 'C'. É se você tentar passar caracteres para a variável salariofixo, vai acontecer algo similar que tentar passar uma string(nome) para char. Espero ter lhe ajudado, até mais!
  15. @Cícero Santoss Olá, Você, se esqueceu de incluir as bibliotecas necessárias, não soube ou esqueceu de como definir a precisão para o salário total. O código que fiz para exemplo é bem similar ao seu, com algumas alterações: #include <iostream> #include <iomanip> #include <string> using namespace std; int main() { string nome; double salariofixo, vendasefetuadas; double salariototal; cout << "Nome: "; getline(cin, nome); cout << "Salario: "; cin >> salariofixo; cout << "Total de vendas: "; cin >> vendasefetuadas; salariototal = salariofixo+((vendasefetuadas*15)/100); cout << "Salario total = " << fixed << setprecision(2) << salariototal << "\n"; return 0; } Espero ter lhe ajudado em algo, até mais!

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

×
×
  • Criar novo...