Polmax Posted March 22, 2012 at 12:10 PM Report #445110 Posted March 22, 2012 at 12:10 PM 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
pmg Posted March 22, 2012 at 12:21 PM Report #445115 Posted March 22, 2012 at 12:21 PM 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!
Polmax Posted March 22, 2012 at 12:59 PM Author Report #445127 Posted March 22, 2012 at 12:59 PM e se não tiver a certeza ? é que pode ser um algarismo tipo 2 3 ou dois 12 14
HappyHippyHippo Posted March 22, 2012 at 01:04 PM Report #445131 Posted March 22, 2012 at 01:04 PM pode haver mais problemas (por isso tem cuidado quando usares esta solução : scanf("%s %s", string1, string2); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
pmg Posted March 22, 2012 at 01:11 PM Report #445138 Posted March 22, 2012 at 01:11 PM 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!
Polmax Posted March 22, 2012 at 04:07 PM Author Report #445176 Posted March 22, 2012 at 04:07 PM o imput são sempre dois números podem é estar com 1 ou 2 dígitos nessa linha nunca vai haver mais nada. Ou seja uso o fgets e leio a linha toda e depois como uso o scanf para separar estes dois números e guarda-los como int ?
pmg Posted March 22, 2012 at 04:14 PM Report #445177 Posted March 22, 2012 at 04:14 PM 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!
Polmax Posted March 22, 2012 at 04:48 PM Author Report #445181 Posted March 22, 2012 at 04:48 PM Mas nao tou a perceber como separo , scanf("%s %s", string1, string2); pra isso ja tenho que ter duas strings nao ?
HappyHippyHippo Posted March 22, 2012 at 05:00 PM Report #445182 Posted March 22, 2012 at 05:00 PM já não as tens ???? //fazendo isto FILE *ficheiro; char *stringp1,*stringp2, string1[3],string2[3]; // <<--- ?!?!?!? ficheiro=fopen("teste.txt","r"); //string1 =fgets(string1,3,ficheiro); //string2 =//? fscanf(ficheiro, "%s%s", string1, string2); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Polmax Posted March 22, 2012 at 05:33 PM Author Report #445187 Posted March 22, 2012 at 05:33 PM Ok o que eu ja tenho é isso FILE *f; char filename [20],*strp,strfinal [6]; int lin,col; gets (filename); f=fopen(filename,"r"); strp=fgets(strfinal,6,f); sscanf ("%d %d",&lin,&col); era isto ?
HappyHippyHippo Posted March 22, 2012 at 07:03 PM Report #445206 Posted March 22, 2012 at 07:03 PM 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 Portugol Plus
Polmax Posted March 22, 2012 at 08:23 PM Author Report #445220 Posted March 22, 2012 at 08:23 PM 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?
pmg Posted March 22, 2012 at 10:30 PM Report #445238 Posted March 22, 2012 at 10:30 PM 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!
Polmax Posted March 23, 2012 at 07:52 AM Author Report #445288 Posted March 23, 2012 at 07:52 AM Ok vou usar a fgets então , obrigado pela ajuda 😉
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