Pesquisar na Comunidade
Mostrando resultados para as tags ''fgets''.
Encontrado 7 registros
-
void ListarCadCliente() { FILE* arquivo; arquivo = fopen("cadUser.txt","r"); char nome[120], endereco[200], telefone[20], email[120], cpf[20], rg[20]; arquivo = fopen("cadUser.txt","r"); // abrir arquivo em modo leitura while(!feof(arquivo)) { //Se o nome tem espaços ele não continua a leitura do documento e entende que a cada espaço tem uma variável a ser atribuída// fscanf(arquivo,"%s %s %s %s %s %s\n", nome, endereco, email, telefone, cpf, rg); // acessar os dados printf(" Nome: %s / Endereço: %s \n E-mail: %s / Telefone: %s / CPF: %s / RG: %s\n\n",nome, endereco, email, telefone, cpf, rg); // exibir na tela } } } fclose(arquivo); // FECHAR O ARQUIVO printf(" Fim da listagem!"); getch(); } No print abaixo eu tenho 2 situações 1* Se eu escrever os nomes todos juntos ele le certinho, porém não posso deixar o programa assim, pois preciso digitar o endereço da pessoa. 2*Se eu criar um arquivo onde os dados são separados por virgula e os nomes estão escritos normalmente utilizando espaços pra escrever, o programa entende que a cada espaço tem uma variável a ser atribuída um valor... Problema:Como faço pra ler uma string toda e parar na vingula e a próxima da mesma maneira... sempre entendendo que o final da string é a virgula?
-
estou usando o seguinte algoritmo : #include <stdio.h> #include <stdlib.h> int main() { int num, g=0, fase, horario[2], codigo; //g = gerador de códigos de cada turma char curso[30]; scanf("%i", &num); switch(num){ case 1: codigo=g; fgets(curso,30,stdin);// <<FGETS AQUI>> scanf("%i", &fase); printf("escreva o horario de tal maneira: 13 30, onde 13 são as horas e 30 os minutos."); scanf("%i", &horario[0]); //horas scanf("%i", &horario[1]); //minutos printf("%i %i %i:%i", codigo, fase, horario[0], horario[1]); //fazer scanf do char com um looping g++;// deve ser a ultima linha do case1 EXCLUIR ISSO DEPOIS } return 0; } o programa só funciona quando tiro o fgets, ao coloca-lo ele muda completamente o printf pra lixo, não consigo entender o porque
-
Estou escrevendo um código onde preciso ler dois arquivos: em um deles há apenas uma linha com 20 caracteres; no outro há muitas linhas, todas com 20 caracteres. Meu objetivo é comparar cada linha do segundo arquivo com a única linha do primeiro arquivo. O resultado da comparação será gravado em um terceiro arquivo onde para cada caractere que coincidir, eu atribuo o valor 1 e, para cada caractere que não coincidir, eu atribuo 0. O que não consigo compreender é porque, apesar da função fgets está capturando todos os caracteres desejados dos arquivos, ela não está comparando o primeiro caractere do arquivo 1 com o primeiro caractere de cada linha do arquivo 2. (sei disso porque, antes do laço, se eu imprimo os caracteres lidos do arquivo 1, eu consigo visualizar todos que desejo. Porém, se imprimo os caracteres lidos do mesmo arquivo, dentro do laço, o código não imprime o primeiro caractere do arquivo 1). Abaixo, o código. #include <stdbool.h> #include <string.h> #include <stdlib.h> #include <locale.h> #include <stdio.h> main(){ //Declara variáveis e solicita do usuário a entrada do gabarito oficial char gabarito_oficial[21],gabarito_individual[21]; int i=0; //abre o arquigo de gabaritos dos candidatos para leitura e cria e abre o arquivo onde irá escrever os gabaritos corrigidos //também abre o arquivo com o gabarito oficial FILE *fp1=fopen("gabaritos.txt","r"); if (fp1==NULL) printf("não foi possível abrir o arquivo gabaritos.txt"); FILE *fp2=fopen("gabaritos_corrigidos.txt","w"); if (fp2==NULL) printf("não foi possível criar o arquivo gabaritos_corrigidos.txt"); FILE *fp3=fopen("gabarito_oficial.txt","r"); if (fp3==NULL) printf("não foi possível abrir o arquivo gabaritos.txt"); //laço para ler o gabarito de cada candidato individualmente e comparar item a item com o gabarito oficial que está na variável //gabarito_oficial fgets(gabarito_oficial,22,fp3); while (fgets(gabarito_individual,22,fp1)!=NULL){ while (i<20){ if(gabarito_individual==gabarito_oficial) fputc(49,fp2); else fputc(48,fp2); i=i+1; } i=0; fputc(10,fp2); } fclose(fp1); fclose(fp2); fclose(fp3); return 0; }
- 1 resposta
-
- leitura de arquivos
- fgets
- (e %d mais)
-
Para criar este programa utilizei pelo menos cinco funções e duas macros fundamentais para o bom desempenho, que foram as funções: fseek(); Para posicionar o ponteiro de arquivo num byte específico fscanf(); É para o arquivo o que scanf é para o console putc(); Escreve um caracter em um arquivo fgets(); pega uma linha inteira de um arquivo feof();retorna verdadeiro se o final de arquivo foi atingido; E as macros: SEEK_SET, SEEK_CUR. Estas funções e estas macros estão no arquivo de cabeçalho stdio.h. Estas macros trabalham como parâmetros na função fseek(); e são perfeitas para posicionamentos, isto é, acesso aleatórios de dados. SEEK_SET ==> Marca um início no arquivo SEEK_CUR ==> Ponto corrente no arquivo SEEK_END ==> Não foi utilizado neste programa, marca o fim do arquivo. A lógica para posicionar a leitura no início dos nomes das candidatas foi um pouco confusa, note que estes nomes começam na linha seis do arquivo, que começa em zero ( 0 ) e segue até a linha quinze ( 15 ). Então, calculei o tamanho do arquivo e a posição de início dos nomes como já citei acima, e coloquei como condição dentro de um laço while(); A cada ciclo do while(); a variável de controle é incrementada e um novo valor é adicionado, este valor, corresponde ao total de caracteres de cada linha contando com espaços, que obviamente o ciclo pula para a linha mais abaixo, até que o arquivo chegue em sua última linha. Más isto tudo foi porque teimei em fazer esta leitura da coluna dos nomes com fscanf(); Com fgets(); isto teria sido bem mais simples. Um novo arquivo é criado, e recebe escritas dos caracteres dos nomes com a função putc(); agora o arquivo é fechado e aberto novamente como leitura. Esta foi uma breve descrição do funcionamento deste programa, que é indicado a estudantes mais avançados em c. Veja abaixo o link do código do programa: http://codigosfontes-ccplus-plus.blogspot.com.br/2015/10/arquivo-extraindo-e-salvando-coluna.html
-
Programadores em linguagem c tem que ter pleno domínio em manipulação de arquivos, e para provar que não estamos de blá-blá-blá, criei este programa interessante. No programa são usados duas funções para leitura nos arquivos,que é a função fscanf(); e a função fgets(); Más o impressionante aqui é que temos a ousadia de escolher as colunas do arquivo a ser lida, ou o arquivo inteiro é claro. Tá certo que utilizei a função fseek(); em conjunto com a função fscanf();se não seria quase impossível conseguir isto. Já já função fggets(); que é muito mais fácil de trabalhar não se fez necessário a função fseek(); para posicionar a leitura só da coluna dos nomes. Fica difícil falar aqui de cada uma das funções, comandos, ou linha de códigos utilizados no programa, más disponibilizo gratuitamente o código para todos os amantes de linguagem c. Veja abaixo o link do código do programa: http://codigosfontes-ccplus-plus.blogspot.com.br/2015/10/arquivo-escolhendo-colunas-para-leitura.html
-
- programa
- linguagem c
-
(e %d mais)
Tags:
-
Programadores em linguagem c tem boas opções em funções que fazem leitura de arquivos de texto, e uma outra função que pode ser usada para isto é a função fread(); Aliás, é mais recomendado o uso de fread(); para leitura por trabalhar com dados binários ao contrário de outras que trabalham com ASCII, e provoca perda de desempenho em arquivos maiores. A função retorna o número total de elementos lidos, que pode ser menor do que o que foi especificado na chamada da rotina se o final do arquivo for atingido ou se ocorrer um erro. Arquivos binários também podem ser lidos como registros de dados estruturados, Além disso, uma vez que todos os registros tem o mesmo tamanho, os dados podem ser acessados de forma não-sequencial (acesso aleatório). A sintaxe de fread (); é: fread ( &tipo_nome, sizeof ( tamanho ), quantidade, arquivo ); sendo: A variável recebe o endereço dos dados lidos do arquivo tamanho é o número de bytes a ser lido. Para calcular isso você deve usar o operador sizeof, quantidade indica quantos itens serão lidos ( cada item do tamanho especificado ) arquivo é um ponteiro para o arquivo aberto anteriormente. Uma boa prática, aliás sempre uso, é analisar o retorno de fread para ver se não ocorreram erros. Isto pode ser feito com uma instrução deste tipo: if ( fread ( &nome, sizeof ( nome ), 1, arquivo ) != 1 ) printf("Erro de leitura.\n"); O programa é simples e indicado a iniciantes em c. Veja o link do código abaixo: http://codigosfontes-ccplus-plus.blogspot.com.br/2015/10/arquivo-leitura-com-fread.html
-
Aém de fscanf(); que usamos para leitura de textos num arquivo também podemos usar a função fgets(); A função fgets(); lê uma linha inteira de uma vez, ou até que um '\n' tenha sido encontrado. O endereço da string lida, é retornado se a leitura foi realizada corretamente, ou o retorno NULL se a leitura fracassou. Considere como certo a seguinte sintaxe para fegets(); char *fgets ( char *minhaString, int numBytes, FILE *arq ); Vale lembrar que estas duas funções que foram citadas acima, são da biblioteca padrão do c, stdio.h. Neste tópico trago um bom exemplo de leitura de arquivos usando fgets(); A matriz onde armazenamos nosso texto lido do arquivo foi alocada dinamicamente, e liberada após o uso, pela funçõa free(); Note que isto é uma obrigação nossa, já que somos futuros bons programadores em linguagem c. Acompanhe abaixo uma imagem do programa em execução: Na imagem abaixo, temos o nosso arquivo de texto utilizado: Veja abaixo o link do código do programa: http://codigosfontes-ccplus-plus.blogspot.com.br/2015/10/aem-de-fscanf-que-usamos-para-leitura.html