princknoby Postado Dezembro 17, 2018 Denunciar Share Postado Dezembro 17, 2018 (editado) 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 Dezembro 17, 2018 por princknoby Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Nefisto Postado Dezembro 17, 2018 Denunciar Share Postado Dezembro 17, 2018 (editado) 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: "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. 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 Dezembro 17, 2018 por Nefisto Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Dezembro 17, 2018 Denunciar Share Postado Dezembro 17, 2018 🤐 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Nefisto Postado Dezembro 17, 2018 Denunciar Share Postado Dezembro 17, 2018 @vangodp falei besteira?? hehe não intendi o emoticon, caso eu tenha falado bobeira, favor me corrija Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 princknoby Postado Dezembro 17, 2018 Autor Denunciar Share Postado Dezembro 17, 2018 @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 😄 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Dezembro 18, 2018 Denunciar Share Postado Dezembro 18, 2018 21 horas atrás, Nefisto disse: @vangodp falei besteira?? hehe não intendi o emoticon, caso eu tenha falado bobeira, favor me corrija não... para nada. Perfeito.👌 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Assissi Postado Janeiro 2, 2019 Denunciar Share Postado Janeiro 2, 2019 @Nefisto excelente resposta.Perfeito 👏👌🎯 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
princknoby
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:
seria diferente de usar:
ou também usar:
Desde já, obrigado 😄
Editado por princknobyLink para o comentário
Compartilhar em outros sites
6 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.