killezio Posted January 8, 2016 at 12:44 AM Report Share #591633 Posted January 8, 2016 at 12:44 AM Estou com uma dúvida, imaginem que temos um ficheiro de texto cujas primeiras linhas são algo do género: 102 2 10 E agora eu quero ler o primeiro número de uma só vez e gravá-lo numa variável. então faria algo do género: fread( *variavel_tipo_inteiro_pequeno , sizeof( short int) , 1,*ficheiro); Como é que o C vai buscar o 102? porque é que ele não pega por exemplo apenas no 12 pois, num ficheiro de texto, são caracteres cujo no total ocupam 2 bytes. Outra questão é se temos que ter em conta a leitura do \n no final de cada linha. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 8, 2016 at 07:36 AM Report Share #591637 Posted January 8, 2016 at 07:36 AM E agora eu quero ler o primeiro número de uma só vez e gravá-lo numa variável. então faria algo do género: fread( *variavel_tipo_inteiro_pequeno , sizeof( short int) , 1,*ficheiro); não fread é para ler dados em binário, e não no formato textual (para não falar que o próprio exemplo está mal) o que tens de fazer é : int variavel; if (fscanf(ficheiro, " %d", &variavel) != 1) { // erro na leitura } Outra questão é se temos que ter em conta a leitura do \n no final de cada linha. isso é algo que depende sempre da leitura. por exemplo, o código que coloquei acima, ao colocar o espaço inicial, já descarta esse mesmo caracter '\n'. no entanto, como não é caso geral, o processo de leitura/descarte desse caracter tem de ser avaliado caso a caso. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
killezio Posted January 8, 2016 at 01:48 PM Author Report Share #591650 Posted January 8, 2016 at 01:48 PM ok obrigado pela ajuda Link to comment Share on other sites More sharing options...
killezio Posted January 9, 2016 at 02:05 PM Author Report Share #591696 Posted January 9, 2016 at 02:05 PM (edited) então, mas eu já utilizei o fread para ler ficheiros de texto. em particular li em texto e o sítio onde coloquei foi diretamente num ficheiro binário EDIT: já sei como fiz, no entanto se fread é para ficheiros binários porque é que ele funciona a ler a partir de ficheiros de texto para binários. seria mais fácil se calhar se alguém explicasse como o fread funciona. e eu não quero dizer o que ele faz, pois isso percebe-se pelos argumentos da função. Edited January 9, 2016 at 02:20 PM by killezio Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 9, 2016 at 02:19 PM Report Share #591698 Posted January 9, 2016 at 02:19 PM Para poder explicar e necessario saber o teu nivel de conhecimento sobre a meneira de como o computador guarda a info em memoria IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
killezio Posted January 9, 2016 at 02:21 PM Author Report Share #591699 Posted January 9, 2016 at 02:21 PM só tive um semestre em programação de microprocessadores, no entanto falámos disso. de qualquer forma agradecia imenso se me pudesses explicar. mesmo que eu nao perceba diretamente as coisas posso simplesmente pesquisar depois Link to comment Share on other sites More sharing options...
killezio Posted January 9, 2016 at 06:33 PM Author Report Share #591714 Posted January 9, 2016 at 06:33 PM Acho que é melhor reformular a pergunta para: qual a forma mais simples de ler um número num ficheiro de texto? tanto quanto sei apenas só a ler caracter de cada vez e depois usar o número de algarismos para multiplicar por 10,100,1000 dependendo do número. ou seja, o número "123", ler 1 depois 2 e depois 3, e de seguida multiplicar o 2 por 10 e o 3 por 100 e adicionar tudo para obter 123. Link to comment Share on other sites More sharing options...
pwseo Posted January 9, 2016 at 08:15 PM Report Share #591724 Posted January 9, 2016 at 08:15 PM (edited) killezio, A solução mais simples e mais utilizada é utilizar a função fscanf (ou scanf, se estiveres a ler do stdin). Aqui fica um breve exemplo: #include <stdio.h> int main(void) { int n; scanf("%d", &n); printf("O número lido foi %d\n", n); return 0; } Edited January 9, 2016 at 10:33 PM by pwseo Acrescentado exemplo. Link to comment Share on other sites More sharing options...
killezio Posted January 10, 2016 at 03:22 PM Author Report Share #591768 Posted January 10, 2016 at 03:22 PM (edited) pois mas nesse caso a função scanf vai buscar os tais 2 ou 4 bytes ( que é o espaço que ocupa um inteiro) ao ficheiro de texto. ou seja se temos um ficheiro da seguinte forma: 10 2 o scanf deve ir buscar "10\n2" e guardar num inteiro nao? (para o caso do inteiro representar 4 bytes) Edited January 10, 2016 at 03:52 PM by pwseo tags code. Link to comment Share on other sites More sharing options...
pwseo Posted January 10, 2016 at 03:52 PM Report Share #591773 Posted January 10, 2016 at 03:52 PM Repara, se o ficheiro de texto é: 10 2 Então a função scanf irá ler apenas o número 10 para armazenar numa variável do tipo int. Não é completamente claro o que estás a tentar fazer, e parece-me que estás a confundir bastante a leitura de um número inteiro vs leitura da representação textual de um número inteiro. Normalmente, quando falamos em ler um número, estamos a falar da sua representação textual (e utilizamos scanf, que lê 1 byte por cada algarismo), caso contrário estamos a falar de um valor que será lido com recurso a fread (que lê 2, 4, 8 ou N bytes, dependendo da amplitude do tipo de dados que indiques). Link to comment Share on other sites More sharing options...
killezio Posted January 10, 2016 at 04:30 PM Author Report Share #591779 Posted January 10, 2016 at 04:30 PM eu estou a tentar ler a representação visual de um número inteiro já que estamos a falar de ler um ficheiro de texto. como é que a função scanf sabe que no seguinte exemplo de um ficheiro de texto: "10qtr\n" ao fazer fscanf para um inteiro ela lê corretamente o 10? Link to comment Share on other sites More sharing options...
pwseo Posted January 10, 2016 at 04:36 PM Report Share #591781 Posted January 10, 2016 at 04:36 PM A resposta a essa pergunta é relevante para a tua tarefa? Penso que não, e podes estar a complicar as coisas. Querias saber como ler um número de um ficheiro de texto e foi-te explicado como isso é feito. A forma como a scanf faz isso (ou seja, a sua implementação) não é para aqui chamada, a menos que queiras fazer isso de raiz tu mesmo. De qualquer modo envolve algo como ler cada dígito do número e multiplicar o seu valor pela potência de base 10 apropriada para no final somar todas as parcelas. Logicamente, ao ler 'q' a função sabe também que não está mais a ler o número. Link to comment Share on other sites More sharing options...
killezio Posted January 10, 2016 at 06:39 PM Author Report Share #591784 Posted January 10, 2016 at 06:39 PM De qualquer modo envolve algo como ler cada dígito do número e multiplicar o seu valor pela potência de base 10 apropriada para no final somar todas as parcelas. Logicamente, ao ler 'q' a função sabe também que não está mais a ler o número. era o que eu estava a fazer. bem obrigado pelo esclarecimento. inicialmente estava à procura de como ler um número de uma forma mais direta mas depois interessei-me por saber como o C funcionava Link to comment Share on other sites More sharing options...
pwseo Posted January 10, 2016 at 06:59 PM Report Share #591785 Posted January 10, 2016 at 06:59 PM era o que eu estava a fazer. Sim, eu tinha visto no post que deixaste acima. No entanto, ninguém lê números manualmente excepto em situações muito particulares. Habitualmente utiliza-se scanf ou fscanf. 1 Report Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now