Ir ao conteúdo
  • Cadastre-se

C Ler arquivos de texto em C


PenseC
Ir à solução Resolvido por Lucca Rodrigues,

Posts recomendados

Boa tarde a todos!

Galera, eu estava estudano como ler um arquivo de texto em C. Para isso, eu criei um arquivo com o bloco de notas e salvei na minha área de trabalho.

Então eu fiz o seguinte código:

#include <stdio.h>
#include <stdlib.h>

int main()
{
   FILE *t;
   t = fopen("stringteste.txt", "r");

   char texto[100];

   while(fgets(texto,100,t) != NULL)
   {
       printf("%s",texto);
   }
   fclose(t);
    return 0;
}

O programa compila, mas não a parece a mensagem que escrevi, mas aparece isso:

image.png.675791871eb95586a9eadcf4cfd95d08.png

Então pense que talvez o ndereço do meu arquivo estaria escrito errado no código. Fui no arquivo, copiei o endereço dele e coloquei dentro do "fopen":

#include <stdio.h>
#include <stdlib.h>

int main()
{
   FILE *t;
   t = fopen("C:\Users\well\Desktop\stringteste.txt", "r");

   char texto[100];

   while(fgets(texto,100,t) != NULL)
   {
       printf("%s",texto);
   }
   fclose(t);
    return 0;
}

Nesse caso apareceu uma mensagem de erro.

image.png.46de51ea802e5dd9b679ce521345ce44.png

Então, não consigo perceber meu erro.

Desde ja agradeço a ajuda de vocês.

OBS: O nome do meu arquivo de texto é:

image.png.258811105f5bc91fdd8390fc642391b6.png

Link para o comentário
Compartilhar em outros sites

  • Solução

@PenseC

34 minutos atrás, PenseC disse:

Nesse caso apareceu uma mensagem de erro.

image.png.46de51ea802e5dd9b679ce521345ce44.png

Caso você queira inserir o diretório completo, são 2 barras em vez de apenas 1, então esse diretório aí seria algo como: "C:\\Users\\well\\Desktop\\stringteste.txt".

E está funcionando sim:

image.png.d64e8ef1120d8c6c0cb7eeb48fc9a3b9.png

stringteste.txt

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

image.png.18e26309607e79ed559a5e3aa10369cc.png

 

 

 

 

@Lucca Rodrigues

 

Para compilar C use um arquivo .c 

 

No melhor dos casos não vai fazer diferença, mas nem todo caso é o melhor. Há muitas diferenças em termos de declarações, palavras chave e inicialização por exemplo e quando der um problema pode ser díficil de achar a razão porque vai estar procurando em outro lugar
 

@PenseC

 

FILE *t;
t = fopen("C:\Users\well\Desktop\stringteste.txt", "r");

 

  • não há razão para declarar isso em duas linhas
  • Está declarando t. Qual o tipo de t? t é FILE*. Declare como tal. Se está aprendendo evite esse vício de deixar asteriscos do lado direito da declaração. É claro que se t é FILE* *t é FILE. É a definição da linguagem. Mas esá declarando t. Prefira sempre em uma linha só:
     
        FILE* t = fopen("stringteste.txt", "r");

De volta ao comando: Veja esse printf()
 

	printf("\nteste\tvalor1\tvalor2\x33\n");


Ele mostra
 

teste   valor1  valor23

 

Ou seja: 

  • pula uma linha devido ao '\n'
  • escreve teste
  • pula para a próxima tabulação, aqui 8 colunas, devido ao '\t'
  • escreve valor1
  • pula para a próxima tabulação, mais 8 colunas, devido ao outro '\t'
  • escreve valor2
  • escreve 3 porque \x33 é o valor 33 em hexa, 51 em decimal, e é o "3"
  • pula uma linha devido ao '\n'

Ou seja: printf() entende de modo especial o n e o t depois de uma barra invertida...

 

E aí vem a sua linha
 

t = fopen("C:\Users\well\Desktop\stringteste.txt", "r");

 

E é a mesma coisa: a barra invertida indica que o próximo caracter é algo diferente

  • \U é o prefixo para uma constante Unicode
    Veja no Windows 10
    image.png.06c4a84dae177e90374dd01b6f615717.png
  • Pois é....

\U + 1D5F como aparece aqui no fim gera uma letra grega, um delta minúsculo tão caro aos matemáticos :)

 

Só que no seu programa veio \User e isso não é um codepoint válido Unicode, já que nem são valores hexadecimais....

 

 

 

 

 

 

 

 

 

 

 

 

 

 

E o compilador explicou:

 

image.png.c8dcc777fe6aec62fe8f558ecdfe67af.png

 

Os outros dois, w e s não tem significado especial e assim o compilador só disse que é uma sequência de escape inválida. Essas coisas são conhecidas como escape sequences...

 

Em 03/12/2020 às 12:37, Lucca Rodrigues disse:

Caso você queira inserir o diretório completo, são 2 barras em vez de apenas 1, então esse diretório aí seria algo como: "C:\\Users\\well\\Desktop\\stringteste.txt"

 

É verdade mas não é: não tem a ver com o diretório completo, apenas com o fato de que a barra invertida tem um significado especial, inicial uma sequência de escape, e para mostrar uma barra invertida você SEMPRE usa duas. Mesmo caso do "%" em printf(): para mostrar um se escreve dois.

 

C e os nomes de arquivo:

 

Entenda que tanto faz escrever
 

    FILE* t = NULL;

    t = fopen("teste/stringteste.txt", "r");
    t = fopen("teste\\stringteste.txt", "r");

 

E entenda que o nome do arquivo deveria vir CLARO na linha de comando. Não faz sentido o nome do arquivo estar fixo dentro do programa. Vai compilar o programa cada vez que for mudar o nome de arquivo? Uma constante? 

 

1 hora atrás, PenseC disse:

Mas agora que você falou das duas barras, eu aprendi a colocar o diretório.

 

Entenda que isso nada tem a ver com o diretório. É C. Ou C++. Ou java... Muitas linguagens usam a barra invertida de odo particular, assim como aspas e '%' por exemplo...

 

Não use o nome completo do arquivo. Só vai dar problema. Muito menos a letra do volume. E use a linha de comando para passar o nome do arquivo

image.png

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!