Cshark Postado Fevereiro 28, 2010 Denunciar Share Postado Fevereiro 28, 2010 Estou fazendo um exercicio que pede o seguinte1.Ao receber um arquivo de texto, retorne no mesmo arquivo todas as letras em maiúsculo.então, eu escrevi esse codigo mas não esta funcionando ele pega todas as letras do arquivo e as mostra na tela em maiusculo mas no arquivo texto ele não muda nada, todas as letras continuam em minusculo.vai ae o codigo#include <stdio.h> #include <conio2.h> #include <ctype.h> int main() { FILE *arq; char c; int n=1; arq = fopen("arq.txt","r+"); rewind(arq); c = toupper( fgetc(arq) ); while( !feof(arq) ) { fputc( (char)c, arq ); printf("%c",c); fseek(arq,( n*sizeof(char) ),0); n++; c = toupper(fgetc(arq)); } printf("\n\nDONE"); fclose(arq); getch(); return 0; }o que esta errado?????estou pensando em fazer tudo num arquivo temporario mas se tiver outro jeito por favor falem aeagradeco Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Cshark Postado Fevereiro 28, 2010 Autor Denunciar Share Postado Fevereiro 28, 2010 pessoal eu fiz umas modificacoese agora ele funciona se o arquivo so tiver 1 linhase o arquivo tiver 2 ou mais linhas o programa entra num loop infinito e enche o arquivo de espacos (aparentemente)não sei porqueo novo codigo#include <stdio.h> #include <ctype.h> int main() { FILE *arq; char c; int n=1; arq = fopen("arq.txt","r+"); c = toupper( fgetc(arq) ); fseek(arq, (n-1)*sizeof(char), 0); fputc( c, arq ); printf("%d",c); fseek(arq, n*sizeof(char), 0); n++; c = toupper( fgetc(arq) ); while( !feof(arq) ) { fseek(arq, (n-1)*sizeof(char), 0); fputc( c, arq ); printf("%d",c); fseek(arq, n*sizeof(char), 0); n++; c = toupper( fgetc(arq) ); } printf("\n\nDONE"); fclose(arq); getchar(); return 0; }alguém sabe me dizer oque esta acontecendo?obrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Cshark Postado Março 1, 2010 Autor Denunciar Share Postado Março 1, 2010 Muito obrigado a todos pela ajuda, mas um amigo meu me deu uma outra solucao para o problemaque é abrir o arquivo em modo binarioarq = fopen("arq.txt","rb+");Aqui estou citando o r.stiltskin:"As you probably know, in Windows, each line in a text file is terminated by two chars, 13 10 ('cr' 'lf'). For some stupid reason, when the file opened in text mode, when it comes to the end of the line fgetc (in Windows) ignores the 13 and just returns the 10. (And the same seems to be true for fread -- I tried that too.) But when you write a 'lf' to the file, fputc (in Windows) writes 'cr' 'lf'. So your program reads a 10, then writes 13 10, then advances 1 char and reads the 10 again, and so on forever. When you open it in binary mode, the program will read and write exactly what you want, 1 char at a time."Traducao"Como voce já deve saber, no Windows, cada linha em um arquivo texto é terminada por dois chars, 13 10('cr' 'lf'). Por algum motivo idiota, quando o arquivo é aberto em modo texto, quando se chega no final da linha fgetc (No Windows) ignora o 13 e so retorna o 10.(O mesmo é verdade para o fread -- Eu tentei isso tambem.) Mas quando voce escreve um 'lf' no arquivo, fputc (No Windows) escreve um 'cr' 'lf'. então o seu programa le um 10 e escreve 13 10, e avanca 1 char e le o 10 denovo, e ae fica pra sempre. Quando aberto em modo binario, o programa vai ler e escrever exatamente do jeito que voce quer, 1 char por vez " Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Cshark
Estou fazendo um exercicio que pede o seguinte
1.Ao receber um arquivo de texto, retorne no mesmo arquivo todas as letras em maiúsculo.
então, eu escrevi esse codigo mas não esta funcionando
ele pega todas as letras do arquivo e as mostra na tela em maiusculo
mas no arquivo texto ele não muda nada, todas as letras continuam em minusculo.
vai ae o codigo
o que esta errado?????
estou pensando em fazer tudo num arquivo temporario mas se tiver outro jeito por favor falem ae
agradeco
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.