Jump to content
Sign in to follow this  
Leudassdf

[Resolvido] Imprimir valor de um apontador de um array

Recommended Posts

Leudassdf

Boas pessoal,

Eu no meu programa devo pedir os valores para o vetor 1 e depois para o 2. No entanto estou a ter alguma dificuldade em imprimir o elemento 0 do array. alguem sabe como fazer?

Aqui fica o código:

printf("Introduza os elementos do vetor 1.\n");
char vetor[100];
fgets(vetor,101,stdin);

char *V1,*V2;
V1=strtok(vetor," .,-");

Edited by Leudassdf

Share this post


Link to post
Share on other sites
HappyHippyHippo

o código que tens não tem nada haver como o que foi descrito por texto ...

podes especificar o que realmente queres ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Leudassdf

o código que tens não tem nada haver como o que foi descrito por texto ...

podes especificar o que realmente queres ?

Somente pede o primeiro vetor. Ou seja eu devo pedir ao utilizar numeros separados por espaço ou virgula ex: 10,20.

E eu quero fazer um split a essa string. Através do strtok.

Depois eu queria mostrar o valor que está no V1[1] que deve ser o 20 se utilizarmos o ex acima.

Não sei se me consegui explicar....

CUmprimentos

Share this post


Link to post
Share on other sites
HappyHippyHippo

o strtok só separa o texto da frase mediante os caracteres dados.

terás de guardar os segmentos num vector e só depois apresentar


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Leudassdf

o strtok só separa o texto da frase mediante os caracteres dados.

terás de guardar os segmentos num vector e só depois apresentar

E eu ao fazer isto o que faz?

char *V1,*V2;
V1=strtok(vetor," .,-");

Não cria o vetor?

Share this post


Link to post
Share on other sites
HappyHippyHippo

não

a função strtok retorna-te a posição da string onde se encontra o primeiro segmento da frase a separar

nota : a função strtok é destrutiva ! isto é, a frase que se encontra apontada pela variável dada como primeiro argumento da função fica alterada.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Leudassdf

não

a função strtok retorna-te a posição da string onde se encontra o primeiro segmento da frase a separar

nota : a função strtok é destrutiva ! isto é, a frase que se encontra apontada pela variável dada como primeiro argumento da função fica alterada.

Bem em VB é muito mais facil.

Então agora eu tenho que fazer o que? desculpa a minha ignorancia mas estou agora a começar no C...

Share this post


Link to post
Share on other sites
HappyHippyHippo

Então agora eu tenho que fazer o que? desculpa a minha ignorancia mas estou agora a começar no C...

não sei ... o que disseste que era para fazer é demasiado confuso.

só sei que o código que tens não faz sentido.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Leudassdf

não sei ... o que disseste que era para fazer é demasiado confuso.

só sei que o código que tens não faz sentido.

Não me parece confuso.

No entanto o formuláriuo que eu tenho é este:

Elabore um programa que leia dois vectores de n elementos cada (inteiros) e determine um

terceiro com 2n elementos que contenha os elementos do primeiro vector intercalados com

os do segundo vector, mas estes pela ordem inversa da original. Mostre o vector final no

monitor. Considere n = 4 elementos, por exemplo:

vector x = [1 3 5 7] vector y = [2 4 6 8] => vector final = [1 8 3 6 5 4 7 2]

O que eu queria fazer era ler os 2 inputs do utilizador, separalos (split) por eespaços ou virgulas e guardar a informação num vetor.

Share this post


Link to post
Share on other sites
HappyHippyHippo

eu não faria dessa forma porque estás a complicar, mas assim o queres ...

#define MAX 20
#define SEPARADORES " ,"

int main(void) {
 int vector1[MAX];
 int vector2[MAX];
 int resultado[2 * MAX];
 int nvector1 = 0, nvector2 = 0;

 char * valor = NULL, frase[256];
 int nvalor = 0;

 // pedir o primeiro vector
 printf(" ... ");

 // ler os dados inseridos
 fgets(frase, 256, stdin);
 valor = strtok(frase, SEPARADORES);
 while (valor != NULL) {
   if (sscanf(valor, "%d", &nvalor) == 1) {
     vector1[i] = nvalor;
     nvector1++;
   }
   valor = strtok(NULL, SEPARADORES;
 }

 // pedir o segundo vector
 printf(" ... ");

 // ler os dados inseridos
 fgets(frase, 256, stdin);
 valor = strtok(frase, SEPARADORES);
 while (valor != NULL) {
   if (sscanf(valor, "%d", &nvalor) == 1) {
     vector2[i] = nvalor;
     nvector1++;
   }
   valor = strtok(NULL, SEPARADORES;
 }

 // fazer o resto ...

 return 0;
}


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Leudassdf

Bem HappyHippyHippo,

O codigo nao está a funcionar. Eu percebo a tua ideia. Mas gostava de perceber como é que eu parto as strings e depois as vou buscar. Por ex:

char str[100];

printf("\nInput string, delimit words with | :");
scanf("%s",&str);


char * pch;

pch = strtok (str,",");

while (pch != NULL)
{
printf("\n%s", pch);
pch = strtok (NULL, ",");
}
return 0;
}


esse codigo separa as strings por virgulas e mostra-as. no entanto se eu quiser no while guardar não consigo.

Mas eu como não sei quantos digitos o utilizador vai escrever logo preciso de alterar o tamanho de um array que eu depois tenho de criar. No entanto com o realloc não consigo. Penso que o mesmo não guarda os valores que la estavam anteriormente. Eu precisava de algo tipo Redim Preserve do VB

Edited by Leudassdf

Share this post


Link to post
Share on other sites
HappyHippyHippo

O codigo nao está a funcionar

sabes que o código que é escrito aqui raramente é compilado e testado, certo ?

e uma coisas é dizer que não funciona, outra é dizer que tirando pequenas distracções, funciona na perfeição !!

código completo e corrigido e a funcionar

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define MAX 20
#define SEPARADORES " ,"

int main(void) {
 int vector1[MAX];
 int vector2[MAX];
 int nvector1 = 0, nvector2 = 0;

 char * valor = NULL, frase[256];
 int nvalor = 0;

 // pedir o primeiro vector
 printf(" ... ");

 // ler os dados inseridos
 fgets(frase, 256, stdin);
 valor = strtok(frase, SEPARADORES);
 while (valor != NULL) {
   if (sscanf(valor, "%d", &nvalor) == 1) {
     vector1[nvector1] = nvalor;
     nvector1++;
   }
   valor = strtok(NULL, SEPARADORES);
 }

 // pedir o segundo vector
 printf(" ... ");

 // ler os dados inseridos
 fgets(frase, 256, stdin);
 valor = strtok(frase, SEPARADORES);
 while (valor != NULL) {
   if (sscanf(valor, "%d", &nvalor) == 1) {
     vector2[nvector2] = nvalor;
     nvector2++;
   }
   valor = strtok(NULL, SEPARADORES);
 }

 for (int i = 0; i < nvector1; i++) {
   printf("v1 %d = %d\n", i, vector1[i]);
 }

 for (int i = 0; i < nvector2; i++) {
   printf("v2 %d = %d\n", i, vector2[i]);
 }

 return 0;
}

No entanto com o realloc não consigo. Penso que o mesmo não guarda os valores que la estavam anteriormente.

o realloc preserva os dados que existem no array a redimensionar


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
thoga31

Bem em VB é muito mais facil.

É por estas e por outras que eu não recomendo o ensino de VB ou qualquer linguagem .NET antes de uma linguagem mais "a sério" como C.

Habituam-se mal e depois sentem dificuldades em menos de nada.

Claro que em VB é muito mais fácil! Até permite fazer contas numéricas com Strings graças à conversão implícita activada por defeito! Tipo, what?

</off-topic>

Edited by thoga31

Knowledge is free!

Share this post


Link to post
Share on other sites
Leudassdf

É por estas e por outras que eu não recomendo o ensino de VB ou qualquer linguagem .NET antes de uma linguagem mais "a sério" como C.

Habituam-se mal e depois sentem dificuldades em menos de nada.

Claro que em VB é muito mais fácil! Até permite fazer contas numéricas com Strings graças à conversão implícita activada por defeito! Tipo, what?

</off-topic>

É mesmo. E depois quando chegamos ao c ficamos parvos....

Mas pronto. Tem que se aprender...

Share this post


Link to post
Share on other sites
Leudassdf

se eu tiver a variavel t[1]={0}; como posso alterar o 1 para 5 p.ex. È com o realloc? Eu ja tentei mas não consegui. alguém me pode explicar como se resolve?

Share this post


Link to post
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
Sign in to follow this  

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