Jump to content

Vector de Inteiros


FrostPt

Recommended Posts

Hmmm imaginem que tenho uma string "Isto é uma string 12 34" e eu quero só os números. Até aí já fiz, agora imaginem que guardei esses valores num vector de inteiros "guarda_valores[4]". Há alguma maneira de os agrupar como está naquele exemplo? Do género "guarda_valores[0]guarda_valores[1] guarda_valores[2]guarda_valores[3]".

Tentei usar uma coisa parecida com isso:

sprintf(valores[0],"%d%d",guarda_valores[0], guarda_valores[1]);

sprintf(valores[1],"%d%d",guarda_valores[2], guarda_valores[3]);

E depois atribuir variáveis, por exemplo:

x= valores[0]*10;

y= valores[1]*10;

Mas quando verifico o conteúdo do que está lá dentro não é o que quero :S

Será que podiam dar uma vista de olhos e dizer onde está mal, ou se não souberem, podem dar sugestões?

Obrigado a quem possa ajudar 😄

Edited by FrostPt
Link to comment
Share on other sites

O teu exemplo, para mim, funciona como descreves.

Explica melhor a tua dúvida, de preferência com o código que usaste, incluindo a definição das variáveis.


Ah!

não podes usar valores[0] ao mesmo tempo como string (no sprintf) e como inteiro (na multiplicação)

Edited by pmg

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

Mas que raio?! hmmm ok, ent vou postar os erros:

proj_int.c: Na função ‘draw_airport’:

proj_int.c:40:13: aviso: passing argument 1 of ‘sprintf’ makes pointer from integer without a cast [habilitado por padrão]

/usr/include/stdio.h:365:12: nota: expected ‘char * __restrict__’ but argument is of type ‘char’

proj_int.c:41:13: aviso: passing argument 1 of ‘sprintf’ makes pointer from integer without a cast [habilitado por padrão]

/usr/include/stdio.h:365:12: nota: expected ‘char * __restrict__’ but argument is of type ‘char’

Vou postar só a parte que interessa senão o código fica gigante:

http://pastebin.com/aULz6DmN

Suponham que lê bem o ficheiro de texto e analisa estas string 'AIRPORT_SPACE 40 40 5000 brown' Sendo que a dimensão deve ser 40 de largura e 40 de comprimento

Isso significa que se não multiplicar funciona?

Ou será que posso manipular os números no sprintf?

Link to comment
Share on other sites

Suponham que lê bem o ficheiro de texto ...

Mas não lê!!!

Na linha 27 o fgets lê a linha completa; na linha 35 já vai tentar ler valores de outra linha.

Além disso não podes fazer o sprintf para um char (linha 40 (e 41)), tal qual como o aviso indica. Se queres usar o sprintf, tens que passar uma string no primeiro parametro

Vẽ o protótipo, por exemplo, no site POSIX.

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

Mas supostamente não vai ler da mesma linha, pelo menos foi isso que tentei fazer. Ia lendo até ao final do ficheiro, até encontrar "AIRPORT_SPACE" mal encontrasse ia fazer uma espécie de scan a essa linha para procurar os números, depois ia guardando nesse tal vector :S Por isso a linha 27 e 35 seria a mesma linha e não outra.

A parte do springf ainda me está a fazer um bocado de confusão, já vi o protótipo, o que retorna e algumas considerações. Mas ainda não percebi muito bem. Vou tentar mudar o código para ver se consigo melhorar :/

Link to comment
Share on other sites

Então e se fizesses assim (código incompleto)

char linha[100];
char as[100]; /* para "AIRPORT_SPACE" */
int largura, comprimento, pixels;
char cor[100];

   /* lê uma linha completa, ENTER e tudo */
   fgets(linha, sizeof linha, ficheiro);

   /* separa em linha nos constituentes */
   if (sscanf(linha, "%s%d%d%d%s", as, &largura, &comprimento, &pixels, cor) != 5) /* erro */;
   /* para a linha de exemplo, depois do sscanf, as teria "AIRPORT_SPACE",
      largura teria 40, comprimento teria 40, pixels teria 5000, e
      cor teria "brown" */

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 que sou mesmo parvo -.- devia ter suspeitado que se existe um sprintf então também devia existir um sscanf -.- Enfim, pensava que se tinha que declarar um valor constante no segundo argumento do fgets, pelos vistos. não é necessário. O sizeof dá o tamanho dessa linha. Depois guarda nessas variáveis. Só preciso de verificar se 'as' é igual a airport_space, que não há-de ser difícil. Vou ter que criar depois um ciclo para comparar com os outros elementos que não sejam desta linha de exemplo. Por agora só preciso de fazer com que leia correctamente.

Se tivesse a tentar fazer daquela maneira inicial de tentar juntar os dois valores numa string e tentar usar esse valor, há alguma maneira de o fazer? Com strcpy, talvez? Mas continua a não dar. Quer dizer agr, com a introduçao do sscanf se calhar já dá, vou tentar.

Hmmm não vai dar com sscanf pelo menos como estou a fazer, só se fizer da tua maneira. Para a minha maneira resultar tinha de conseguir juntar aqueles dois valores e colocá-los numa variável, mas não estou a conseguir fazer :/

Edited by FrostPt
Link to comment
Share on other sites

pensava que se tinha que declarar um valor constante no segundo argumento do fgets, pelos vistos. não é necessário. O sizeof dá o tamanho dessa linha.

Hmmm ... o sizeof qualquercoisa é uma constante (excepto quando usado com VLAs).

Mas tens razão: o valor a usar no segundo parametro de fgets() não precisa de ser uma constante.

Só preciso de verificar se 'as' é igual a airport_space, que não há-de ser difícil.

Para comparar strings usa strcmp().

... mas não estou a conseguir fazer :/

Mete a tua duvida explicita num tópico novo. Dia o que pretendes, o que acontece, e mostra o código relevante (não ponhas num pastebin, mete directamente no tópico).

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
×
×
  • 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.