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.

vangodp

Membros Plenos
  • Total de itens

    3.496
  • Registro em

  • Última visita

  • Qualificações

    0%

Reputação

565

Sobre vangodp

  • Data de Nascimento 16-02-1977 (41 anos)

Informações gerais

  • Cidade e Estado
    Málaga/Espanã
  • Sexo
    Masculino
  1. Concordo. Discordo Normalmente se trata de programas para estudo mas se a coisa for séria o problema é bem mais complexo. Da uma olhada aqui na sintaxes de um email: https://en.wikipedia.org/wiki/Email_address#Syntax Tenho entendido que para validar emails uma boa estratégia seria usar Autômato finito determinístico, mas também é como matar moscas a canhão para esse enunciado >_<. adicionado 1 minuto depois Usar regex também n seria uma má ideia.
  2. prove com esse: #include <stdio.h> #include <stdlib.h> int main ( int argc, char *argv[] ) { FILE *file; file = fopen ( "result.txt", "r" ); int n1; int i = 0; while ( fscanf ( file, "%d\n", &n1 ) != EOF ) { i++; printf ( "linha %d\n", i);; if ( n1 <= 4 ) printf ( "Menor ou igual", n1 ); else printf ( "Maior", n1 ); } fclose ( file ); return 0; }
  3. Existem muitas formas de abordar esse problema, tudo depende do contexto. Se por exemplo seu arquivo é pequeno e não contem um grande custo no que a processamento se refere, então é melhor você carregar ele na memória completo e editar, por outro lado se são milhares de registros a tratar então seria melhor "zerar" os dados dessa linha para marcar ela como "disponível" para um possível futuro registro, ao inserir um novo dado, esse deveria ocupar esse espaço que foi desocupado. Pense em um arquivo como se fosse um estacionamento, lá você pode retirar carros, mas não quer dizer que eliminar um carro você vai eliminar a vaga, se retirar um carro a vaga permanece la para um novo carro ocupar. Deu para entender? Então seguindo esse raciocínio você pode seguir ao menos 2 ou mais estratégias; eliminar o dado e habilitar o espaço para que ocupe um novo dado ou "tirar todos os carros do estacionamento e enviar a outro estacionamento excetuando o veiculo desejado" que é a estratégia que outros programadores lhe propõem. A segunda é mais fácil pois você carrega tudo na memória trata os dados e envia os dados para um novo arquivo. Para lhe dar exemplos fica difícil pois seria possível lhe passar um montão de código e talvez você não entenda, o melhor seria você buscar um bom tutorial sobre arquivos em internet. Se optar por carregar tudo na memória você pode ler uma linha do arquivo, comparar com o dado que você deseja buscar e se não bater você envia essa linha para um vetor, caso coincida a busca você salta para a proxima linha, ou seja, não faz nada. O esquema seria mais ou menos esse: pedir nome // scanf repetir(até o fim do arquivo)//while -ler uma linha //fscanf -não coincide com nome?//if -enviar para vetor. coincide?//else -não fazer nada. fim repetir//fim do while
  4. C cls nao funciona mais

    que versão é seu codeblocks? e seu compilador? Prove reinstalar.
  5. C cls nao funciona mais

    include stdlib.h ou windows.h
  6. C++ subprograma em dev c++

    bilhar é um objeto não um vetor. arrume isso.
  7. mas se notaaluno retorna void como é que você ta somando void com media?
  8. procure um bom tutorial sobre arquivos em C pela internet, em vídeo ou fóruns.
  9. organize o vetor e mostre os 3 maiores =D
  10. @isrnick Tive queimando o chifre um tempo mais mas deu para entender heheh Valeu!!!
  11. Com uns pequenos ajustes conseguimos fazer com que seu programa imprima a lista "corretamente" SI pulsamos qualquer outra opção que não ser nem 1 e nem 9. Explicação: Traz fazer uns ajustes e retirar de todos os fscanf, fprintf, etc, a variável seq, que ao meu ver não está contida no arquivo E parece não fazer uso desta variável para nada, o programa passou a imprimir a primeira linha do arquivo de forma correta, e isso já é uma boa sinal. Agora, aparentemente, o problema é de lógica. Se o que você quer é mostrar a lista do arquivo para que o usuário saiba o que está fazendo ao alterar o arquivo, você ta errando... você deve imprimir o arquivo completo primeiro dentro de um laço e depois alterar o arquivo. Veja esse código: Aparentemente não faz nada mas posso lhe assegurar que seu programa ja funciona só que ta faltando algo. Preste atenção nisso é importante. Quando alteramos um programa em um arquivo de testo em um editor de código qualquer, o fato de escrever nele não o salva, pois na realidade estamos editando um buffer muitas vezes. É justo al apertar o botão "guardar" ou "salvar" que o programa leva a cabo uma serie de rotinas para enviar os dados ao arquivo e salva-lo. Mas como funciona isso realmente? O primeiro que vou lhe dizer é que se você abrir um arquivo e escrever nele você vai perceber que isso não o alterará. Por quê? fácil porque você não "pulsou" guardar, e para isso você precisa FECHAR ELE TRAZ CADA ALTERAÇÃO(fclose(arq)). É chato mesmo... mas se você não fazer isso, de fechar ele depois de cada alteração, a alteração não ocorrerá. Então visto o visto que falta? Por um fclose no final do case '1'. Faça isso e comprove, ponha um fclose no final do case 1 que altera o arquivo, e veja a magia. Importante!!! Comente as linhas que tenham fgetpos(arq, &pos) e fsetpos(arq, &pos), de momento não servem para nada, só atrapalhar. agora podemos perceber si vamos no arquivo que ele está assim: Mas já podemos ver que altera "corretamente", bom... que altera vamos >_<. O problema agora é que ao fechar o arquivo já não é mostrado a lista , mas isso tem fácil solução... podemos abrir novamente shuesuheus. Depois do ultimo fclose que lhe mandei inserir(dentro do case'1') ponha outra vez o fopen hehe. O problema agora é o seguinte... o programa altera a primeira posição do arquivo sempre, e você seguramente quer alterar uma posição em concreto ou inclusive inserir os dados ao final do arquivo como você diz. No primeiro caso(caso busca) você vai precisar usar as funções fseek, fsetpos, ftell, rewind, etc, para mover o ponteiro de forma correta ao inicio da linha que você quer alterar. No segundo caso, de querer inserir al final do arquivo basta você por antes do fprintf que altera o arquivo o comando fseek ( arq, 0, SEEK_END ), isso move o cursor ao fim do arquivo antes de escrever nele. Acho que seu programa já inseri corretamente ao final com essas alterações. Sobre isso de tamanho fixo ou formato variável não há problemas, o problema é que você n insira uma string maior que a que continha nessa linha anteriormente, ou você sobrescreverá a seguinte linha, e se isso acontecer na ultima linha nem sei te dizer o que acontece, mas boa coisa não será sheuseus. Por isso é preferível você ter um tamanho fixo, porque você sabe que não pode passar isso(mais fácil). Lembre de sempre fechar o programa depois de cada alteração. outra coisa a destacar é que talvez seja melhor usar "a+" em vez de "r+" pois ele lhe permitirá ler, mas não permitirá que os dados sejam inseridos em qualquer lugar, se não que no final do arquivo. De uma olhada nesse pdf:Modos de Abertura Função fopen.pdf E vou lhe deixar um programa que maneja arquivos. algo simples que fiz uma vez, para você dar uma olhada no conceito: arquivos.txt Espero que sirva. Ah!!! e uma pergunta... para que serve isso? scanf("%*[^\n]"); nunca vi isso shueshueshsue adicionado 6 minutos depois mano foi mal... ao inserir o tag spoiler para não ocupar muitas linhas o programa perdeu o formato. Certamente porque esse fórum seja guardado em um servidor linux, e o caracter \n seja diferente. tente arrumar o programa, se tiver duvida amanhã tento arrumar mas agora vou dormir que é tarde e tenho que trabalhar daqui a pouco. Deixo o ultimo que tenho pois fui alterando o mesmo: #include <stdio.h> #include <stdbool.h> #define QTDE 31 char escolha_opcao(); void limpa_linha(); int main() { FILE *arq = fopen("alunos.txt", "r+"); fpos_t pos; char nome[QTDE]; double n1, n2; char opcao = 0; //int seq; int sair = 0; while ( sair != 1 ) { //fgetpos(arq, &pos); rewind(arq); //voltamos ao inicio do arquivo while (fscanf(arq, "%[^0-9]%lf %lf%*c", nome, &n1, &n2) != EOF){ printf("%s %5.2f %5.2f\n", nome, n1, n2); } //traz sair do while que imprime estamos no final do arquivo precisamos voltar ao inicio novamente rewind(arq); //voltamos ao inicio do arquivo opcao = escolha_opcao(); switch (opcao) { case '1': printf("\nnovo nome: "); scanf("%30[^\n]", nome); limpa_linha(); printf("nova nota1: "); scanf("%lf", &n1); printf("nova nota2: "); scanf("%lf", &n2); limpa_linha(); //fsetpos(arq, &pos); fseek ( arq, 0, SEEK_END ); fprintf(arq, "%s %5.2f %5.2f\n", nome, n1, n2); fclose(arq); arq = fopen("alunos.txt", "r+"); break; case '9': sair = 1; break; default: printf("\nmantem os dados\n\n"); break; } } fclose(arq); return 0; } char escolha_opcao() { char op; do { printf("\n\nEscolha a opcao:\n"); printf("1 - Atualiza\n"); printf("2 - Mantem\n"); printf("9 - Termina o programa\n"); printf("Sua opcao: "); scanf("%c", &op); limpa_linha(); } while ((op != '1') && (op != '2') && (op != '9')); return op; } void limpa_linha() { scanf("%*[^\n]"); scanf("%*c"); } Sorte!. adicionado 10 minutos depois maldito tag spoiler que n funciona bem
  12. Não é a forma mais "elegante". Isso sim que é muito pior >_<

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

×