Jump to content

ler dois numeros num ficheiro de texto


Polmax
 Share

Recommended Posts

A minha dúvida é a seguinte , digamos que eu tenha um ficheiro chamado

teste.txt

dentro deste ficheiro tenho duas linhas de texto

linha 1 -> 25 30

linha 2 ->blablabla nao interessa

//fazendo isto
FILE *ficheiro;
char *stringp1,*stringp2,string1 [3],string2 [3];
ficheiro=fopen("teste.txt","r");
string1 =fgets(string1,3,ficheiro);
string2 =//?


O que eu quero é ler no máximo 2 caracteres e passa-los para a string 1 , depois tenho sempre um espaço e começo a ler outros dois caracteres e passo para a string 2

ou seja string1 ->25

string2 ->30

Link to comment
Share on other sites

Se tens a certeza do formato existente no ficheiro

string1[0] = fgetc(ficheiro); // '2'
string1[1] = fgetc(fcheiro); // '5'
string1[2] = 0; // "terminar" a string
fgetc(ficheiro); // ignora espaco
string2[0] = fgetc(ficheiro); // '3'
string2[1] = fgetc(ficheiro); // '0'
string2[2] = 0; // "terminar" a string
// o proximo fgetc() devolve um '\n'

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

e se não tiver a certeza ?

Sem certezas deves contruir um "parser".

Usa fgets() para ler a linha inteira, depois strtol() para isolar os numeros tendo em atenção se houve erros ou não.

Também podes usar scanf(), mas esta função tem esquisitices que são chatas de programar, principalmente quando há caracteres inesperados no input.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Se quiseres obter a sequencia de digitos (uma string) usa a sugestão do HappyHippo.

Se preferes converter as string em numeros inteiros, usa a sugestão do HappyHippo trocando as string por inteiros:

char buf[100];
int num1, num2;
/* ... */
if (fgets(buf, sizeof buf, ficheiro) == NULL) /* erro */;
if (sscanf(buf, "%d%d", &num1, &num2) != 2) /* erro */;

Nota: é sscanf() com 2 s (vem de String Scan Formatted).

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

porque perguntas ????

já compilaste e correste ???

tens um erro e uma instrução desaconselhada :

instrução a trocar :

//gets (filename);                               gets é para esquecer !!!
fgets(filename, 6, stdin);

erro:

//sscanf ("%d %d",&lin,&col);           o primeiro parametro do sscanf e a string de onde vai ser lido os elementos 
sscanf (strp, "%d %d",&lin,&col);
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

não tenho mau , escrevi foi mal aqui :S

mas sim já compilei e parecia estar tudo certo.

quanto ao gets(filename)

para receber o input do nome do ficheiro

o que ta mal ?

--

outra coisa , usar o apontador e a string como primeiro argumento do sscanf vai dar o mesmo , pk?

Link to comment
Share on other sites

quanto ao gets(filename)

A funcao gets() é impossivel de usar com seguranca. A funcao fgets() faz mais ou menos a mesma coisa e é bastante segura quando usada correctamente. Usa fgets() em vez de gets() e, se necessario, remove o enter final que fgets() mantem no input (ao contrario de gets()).

Outro ponto importante acerca do gets(): a versao actualizada da linguagem C (publicada em Dezembro de 2011) nao descreve o que essa funcao faz. Se algum compilador diz ser compilador de C11 e aceitar gets() sem se queixar, isso é porque esta a usar uma extensao. As versoes anteriores da linguagem tinham a descricao de gets() ... por isso é capaz de levar algum tempo até a funcao deixar de existir. Mas nao uses gets().

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.