Esta é a segunda parte de um tutorial que trata a manipulação de arquivos em C. Aqui veremos o funcionamento de funções como: fprintf, fscanf, fwrite, fread, fseek, etc.
[1] Comentário enviado por jllucca em 10/04/2005 - 16:45h
Oi,
tenho uma coisa a acrescentar. Toda a saida/entrada é bufferizada no C, como podemos provar isso? Escreva um arquivo de nomes por exemplo:
Fulano de tal
Joaquim Pidim
Usi De Vi
Quando abrirmos o arquivo e recuperar o primeiro "Nome completo" usando: fscanf(fp, "%s", str); . Teremos como resultado "Fulano" e não Fulano de tal.Poderiamos deixar os nomes com tamanho de 30 espaços sendo apartir do ultimo sobrenome espaços, mas seria uma solução horrivel.
Mais facil é usar um atributo que permite agente dizer "onde" o C deve parar de ler, isso pode ser feito com esse: fscanf(fp,"%[^\n]s",str); . Isso irá trazer "de tal" para str. Em seguida, "Joaquim Pidim" e depois "Usi De Vi" sem complicação ou feitos revolucionarios :p
Bom espero ter sido claro, pois é um atributo incrivel não só pro fscanf mas em outras funções tb.
[2] Comentário enviado por doug_cpp em 11/04/2005 - 17:14h
Legal o recurso de usar %[^\n]s, faz parte dos segredos da linguagem - parabéns ao jllucca e também ao kandrade pelo artigo.
Uma opção alternativa e mais fácil de capturar uma frase com espaços de um arquivo é usar o
fgets(nomeVar, 20, nomeArquivo);
Que atribuirá à variável 'nomeVar' o que foi lido no arquivo 'nomeArquivo'. O fgets não apresenta o problema do fscanf usado de maneira tradicional. Ele captura a linha inteira (no exemplo que dei, até o limite de 19 caracteres (20-1), ou até encontrar o \n - indicando fim da linha).
[6] Comentário enviado por mmilton62 em 27/08/2007 - 12:14h
Olá, alguem teria por ai um codigo em C p/ ler a serial, mas que possa dizer " eu fiz assim e funcionou", a ideia é ler um caracter que entra pela serial. Eu já procurei muito mas as respostas geralmente são vazias e apontam p/ lugar vazio...
Agradeço pela ajuda. ;-)
[8] Comentário enviado por removido em 15/06/2010 - 19:18h
Nossa, é exatamente isso que eu preciso fazer no meu trabalho de programação que vale 30 pontos! Só que eu não tô entendendo nada o.O
não entendi isso ó:
if (!(arq = fopen(s,"w")))
alguém me explica? Nunca vi isso de "(!(...". O que essa parte significa?
[10] Comentário enviado por xcolares em 23/06/2010 - 23:44h
Gostaria de saber como faço para ler um arquivo sendo que só o que me interessa nele e a linha que começa com //# e termina também com //# como o exemplo abaixo:
esse é o arquivo, o que quero dele é somente isto:
float Tf=0.058e-6, Tt=500e-6, a1=1.93147180e0/Tf, a2=2.558427881e0/Tt, t0=log(a1/a2)/(a1-a2), Ao=exp(-a1*t0)-exp(-a2*t0), omegao=4.0*atan(1.0)/(3.0*Tf);
for (n=1; n<=nt; n++){
if((n*dt)<=(1.5*Tf)){
fonte[n]= (vmax/Ao)*(exp(-a1*(float)(n)*dt)-exp(-a2*(float)(n)*dt))*powf((sin(omegao*(float)(n)*dt)),2.0) ;
}else
fonte[n]= (vmax/Ao)*(exp(-a1*(float)(n)*dt)-exp(-a2*(float)(n)*dt));
}
Se alguém puder me ajudar agradeço.
Adolfo Colares
[11] Comentário enviado por Tacioandrade em 28/10/2011 - 17:44h
Alguem aqui sabe se tem como descobrir se o arquivo é de texto ou binário em C?
Não sou programador em C, porem para a faculdade estou tendo que criar um compilador usando esta linguagem. No meu analisador Léxico, preciso pagar e abrir um arquivo de texto e apartir dele fazer a análise. Eu já criei um método que me retorna se o arquivo existe ou não, usando o fopen, porem acontece que mesmo se o arquivo for binário ele será "analisado" e eu gostaria de fazer a verificarão se é binário ou de texto antes de executar a análise para não perder tempo.
Se alguem souber uma forma agradeceria, pois procurei no google e não achei.
Segue meu método de checar se o arquivo existe.
int arquivoExiste(const char *filename) {
FILE *arquivo;