Ir para conteúdo
Fórum Script Brasil
  • 0

O que há de errado com esse codigo(28 linhas)


Cshark

Pergunta

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

#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 ae

agradeco

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

pessoal eu fiz umas modificacoes

e agora ele funciona se o arquivo so tiver 1 linha

se o arquivo tiver 2 ou mais linhas

o programa entra num loop infinito e enche o arquivo de espacos (aparentemente)

não sei porque

o 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

Link para o comentário
Compartilhar em outros sites

  • 0

Muito obrigado a todos pela ajuda, mas um amigo meu me deu uma outra solucao para o problema

que é abrir o arquivo em modo binario

arq = 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 "

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...