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

EOF, '\0' e '\n'


princknoby

Pergunta

Olá a todos, gostaria de tirar um dúvida...

Existe alguma diferença entre usar EOF, '\0' e '\n' ??


Por exemplo, na hora de ler uma string, usar um:

 

 

for (int i = 0; string != '\0'; i++) {code...} 

seria diferente de usar:

 

for (int i = 0; string[i] != EOF; i++) {code...}

ou também usar:

 for (int i = 0; string[i] != '\n'){code...}

Desde já, obrigado 😄

Editado por princknoby
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
1 hora atrás, princknoby disse:

Existe alguma diferença entre usar EOF, '\0' e '\n' ??

Olá @princknoby, Seria mais fácil perguntar se existe alguma semelhança hehe.

Resposta rápida:

  • EOF -> usada quando se trabalha com arquivos para verificar se ainda existe conteúdo para se consumir.
  • '\0' -> indicador de final de palavra, usado em vetores de char
  • '\n' -> caractere que indica quebra de linha

(A resposta longa coloquei no final)

Quanto a segunda dúvida, no seu caso as três são bem diferentes, supondo que string seja um vetor de caracteres:

1-Isso verifica se o ponteiro string é NULL (o que não faz sentido, logo é um erro semântico)

1 hora atrás, princknoby disse:

 for (int i = 0; string != '\0'; i++) {code...} [./codebox]

2-Isso também não faz sentido, você está verificando se o caractere em questão é igual a -1, porém não existem caracteres negativos, e mesmo que você estivesse lidando com arquivos ainda estaria errado pois você não pode usar indexadores em FILE* 

1 hora atrás, princknoby disse:

for (int i = 0; string != EOF; i++) {code...}[./codebox]

3-Esse caso já está OK, supondo que você esteja procurando por quebras de linha em sua string, o que eu creio não ser o caso

1 hora atrás, princknoby disse:

for (int i = 0; string != '\n'){code...}

Os três são diferentes e creio eu que nenhum faz o que você gostaria, supondo que você queira caminhar por uma palavra uma maneira bacana seria:

for (i = 0; string[i] != '\0'; i++)
	{...faz algo bem bacana...}

Só como um detalhe, perceba que a expressão ... string != '\0' ... é opcional, como ela retorna 1 caso a letra seja e o '\0' e 0 caso contrário, então você poderia escrever

for (i = 0; string[i]; i++)
	{...faz algo bem bacana...}

 

Espero ter ajudado, abraços e bons estudos.

Resposta longa:

Vamos começar executando o código abaixo:

printf ("%d\t%d\t%d\n", EOF, '\0', '\n');

Saída: -1 0 10

Bom, a associação entre EOF e '\0' faz sentido já que os dois indicam o final de algo, porem o '\n' é somente um caractere qualquer da tabela ASCII, se você procurar na tabela pelo valor 10:

Capture.PNG.8d3cd50c8a6e7cdcb1fc5b850bcf803d.PNG

"Na computação, line feed é um caractere de controle que indica que uma linha deve ser acrescentada. Ele possui o código ASCII 10. " - wiki

Portanto é só uma maneira de representar o "enter" do seu teclado, isso varia entre SO porem creio que o assunto foge do escopo da pergunta. Portanto já sabemos o que é o '\n', vamos adiante. 

Quando eu crio linhas de código como:

char s[] = "Hello";

A variável "s" indica onde na memoria a minha palavra "Hello" começa, logo s é um ponteiro, porém s só me diz onde a palavra COMECA mas não onde ela acaba, portanto é necessário se ter um "caractere especial" para indicar o final de uma palavra, e o caractere escolhido foi '\0' q também é um char representado na tabela pelo numero 0, que é o mesmo valor usado para NULL. Se você fizer algo do tipo:

char s[4] = "Ola";
s[3] = 'a';

printf ("%s", s);

Vai perceber que a sua palavra vai mostrar mais coisas, provavelmente, do que os 4 caracteres que você reservou para s.

Quanto ao EOF, acrônimo para End Of File, uma macro existente na stdio que representa o valor -1, a imagem abaixo foi tirada do site https://www.gnu.org/software/m68hc11/examples/stdio_8h-source.html que possui a implementacão das lib de c.Capture2.PNG.96ed4de786534c6ecea08d3c15e7d260.PNG

O valor em questão é utilizado quando se trabalho com arquivo, é o indicador retornado quando funções, como fgetc(), não possuem mais informações para retornar do arquivo em questão. Seria como uma macro de controle para arquivos que já foram consumidos.

Editado por Nefisto
Link para o comentário
Compartilhar em outros sites

  • 0

@Nefisto Muito obrigado pela explicação, e perdoe-me a ignorância rsrs, sou beeemmm iniciante ainda e ainda não entendi muito bem todos os conceitos, por isso essas dúvidas meio bobas kkkk

Mas a sua explicação foi perfeita, consegue entender bem, muito obrigado pela ajuda 😄

Quanto ao nosso colega, capaz que foi pra mim o emoticon kkkk por ser uma pergunta que agora vi com clareza bem "idiota" kkkk

Muito obrigado pela disposição 😄

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
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...