servn Posted December 2, 2009 at 10:59 PM Report Share #298513 Posted December 2, 2009 at 10:59 PM Boa noite É possível um utilizador inserir todos os valores para preenchimento de um vector? Ou tem de ser 1 a 1? tenciosamente Servn Link to comment Share on other sites More sharing options...
Baderous Posted December 2, 2009 at 11:18 PM Report Share #298518 Posted December 2, 2009 at 11:18 PM Podes fazer isso de 2 maneiras: [x] num scanf onde saibas à partida a dimensão do array, e então basta fazeres tantas leituras quantas as posições do array: #include <stdio.h> int main(void) { int v[10], i; scanf("%d %d %d %d %d %d %d %d %d %d",&v[0],&v[1],&v[2],&v[3],&v[4],&v[5],&v[6],&v[7],&v[8],&v[9]); for (i=0;i<10;i++) printf("%d\n",v[i]); return 0; } A forma como separas os valores é à escolha do freguês. Neste caso usei espaços para separar. Esta solução dá origem a instruções do tamanho de comboios. [x]utilizando uma função de leitura de strings (scanf/fgets), e depois separando os tokens através da função strtok, fazendo a conversão necessária para o tipo de dados do array: #include <stdio.h> #include <string.h> #include <stdlib.h> #define DIM 3 int main(void) { int v[DIM], i; char str[1024], *ptr=NULL; fgets(str,sizeof(str),stdin); str[strlen(str)-1]='\0'; ptr = strtok(str," "); v[0] = atoi(ptr); i=1; while (ptr && i<DIM) { ptr = strtok(NULL," "); v[i]=atoi(ptr); i++; } for (i=0;i<DIM;i++) printf("%d\n",v[i]); return 0; } Link to comment Share on other sites More sharing options...
servn Posted December 2, 2009 at 11:28 PM Author Report Share #298524 Posted December 2, 2009 at 11:28 PM Obrigado, eu vou usar for (i=0;i<n;i++){ printf("O valor %i é?\n",i); scanf("%i", &v[i]); } pois não sei à partida qual o valor da dimensão. Agora fiquei com outra questão, não usando a função malloc é possível iniciar um vector sem definir a sua dimensão? No código que apresentaste definiste Dim 3, isso é obrigatório? Ou posso por exemplo fazer: #include <stdlib.h> #include <stdio.h> #define NMAX 5000 /*int verifica(int u[], int n) { int i; for (i=0,i<n,i++); } */ int main() { int n=0,i=0,v[n]; system("chcp 1252"); printf("Entre o tamanho do vector menor que 5000: "); scanf("%i", &n); printf("%i\n",n); printf("%i\n",i); for (i=0;i<n;i++){ printf("O valor %i é?\n",i); scanf("%i", &v[i]); } printf("O vector u é:\n"); i=0; for (i=0;i<n;i++){ printf("%i, ",v[i]); } printf("\n"); system("pause"); return 0; } Isto é definir um máximo e depois solicitar ao utilizador um valor? E o que é uma lacuna num vector?? Atenciosamente Servn Link to comment Share on other sites More sharing options...
Baderous Posted December 2, 2009 at 11:51 PM Report Share #298527 Posted December 2, 2009 at 11:51 PM Agora fiquei com outra questão, não usando a função malloc é possível iniciar um vector sem definir a sua dimensão? Não. Se não indicares a dimensão como é que o compilador sabe quanto espaço tem de reservar em memória? Resposta: não sabe. No código que apresentaste definiste Dim 3, isso é obrigatório? Não, isso foi só para definir a dimensão do vector e evitar ter que alterar esse valor quando queria mudar a dimensão do vector. Assim, bastava alterar na directiva do #define DIM. Ou posso por exemplo fazer: #include <stdlib.h> #include <stdio.h> #define NMAX 5000 /*int verifica(int u[], int n) { int i; for (i=0,i<n,i++); } */ int main() { int n=0,i=0,v[n]; system("chcp 1252"); printf("Entre o tamanho do vector menor que 5000: "); scanf("%i", &n); printf("%i\n",n); printf("%i\n",i); for (i=0;i<n;i++){ printf("O valor %i é?\n",i); scanf("%i", &v[i]); } printf("O vector u é:\n"); i=0; for (i=0;i<n;i++){ printf("%i, ",v[i]); } printf("\n"); system("pause"); return 0; } Isto é definir um máximo e depois solicitar ao utilizador um valor? Podes fazer isso, pois no standard C99 foram introduzidos os VLAs, que te permitem definir a dimensão de um array em tempo de execução, contrariamente ao que antes era possível (defini-lo apenas em tempo de compilação). E o que é uma lacuna num vector?? Deve ser um índice ao qual não atribuíste nenhum valor. Link to comment Share on other sites More sharing options...
servn Posted December 3, 2009 at 02:34 PM Author Report Share #298585 Posted December 3, 2009 at 02:34 PM Baderous obrigado por todas as ajudas que tens dado. Então quer dizer que tenho sempre de colocar uma dimensão máxima, e depois posso solicitar uma dimensão para o vector, inferior a esse valor? Ou corro o risco de o compilador não saber quanto espaço deve reservar. Isto supondo que não utilizo a função malloc. Se eu pedir ao utilizador os valores depois de indicar a dimensão ele deve colocá-los todos pois não o fazendo o programa não avança. Assim como está no código que coloquei. Não tem lógica ele dizer que precisa de "10 espaços" e depois só querer inserir 4, certo? Obrigado novamente. Servn Link to comment Share on other sites More sharing options...
Baderous Posted December 3, 2009 at 03:36 PM Report Share #298590 Posted December 3, 2009 at 03:36 PM Então quer dizer que tenho sempre de colocar uma dimensão máxima, e depois posso solicitar uma dimensão para o vector, inferior a esse valor? Ou corro o risco de o compilador não saber quanto espaço deve reservar. Isto supondo que não utilizo a função malloc. Ou indicas a dimensão máxima ou solicitas a dimensão. Não fazes as 2 coisas. Se eu pedir ao utilizador os valores depois de indicar a dimensão ele deve colocá-los todos pois não o fazendo o programa não avança. Assim como está no código que coloquei.Não tem lógica ele dizer que precisa de "10 espaços" e depois só querer inserir 4, certo? Podes declarar um array de 10 posições e inicializar apenas 4. As restantes posições são inicializadas com valores desconhecidos. Link to comment Share on other sites More sharing options...
servn Posted December 3, 2009 at 04:03 PM Author Report Share #298594 Posted December 3, 2009 at 04:03 PM #include <stdlib.h> #include <stdio.h> #define NMAX 5000 int main() { int n=0,i=0,v[n]; system("chcp 1252"); printf("Entre o tamanho do vector menor que 5000: "); scanf("%i", &n); printf("%i\n",n); printf("%i\n",i); for (i=0;i<n;i++){ printf("O valor %i é?\n",i); scanf("%i", &v[i]); } printf("O vector u é:\n"); i=0; for (i=0;i<n;i++){ printf("%i, ",v[i]); } printf("\n"); system("pause"); return 0; } Então não preciso desta linha #define NMAX 5000 ??? 🙂😛 Preciso apenas de int n=0,i=0,v[n]; system("chcp 1252"); printf("Entre o tamanho do vector menor que 5000: "); scanf("%i", &n); Tendo obviamente de dar um valor a n tal como fiz. Podes declarar um array de 10 posições e inicializar apenas 4. As restantes posições são inicializadas com valores desconhecidos. Mas se é o utilizador que coloca de cada vez que ele não coloca fazendo Enter o programa fica à espera correcto, só dando a possibilidade de o utilizador deixar de inserir valores é que ele pode avançar. Usando por exemplo um While em que se o utilizador escrever N ele pára. Estou a inventar ou nem por isso? Link to comment Share on other sites More sharing options...
Rui Carlos Posted December 3, 2009 at 05:31 PM Report Share #298608 Posted December 3, 2009 at 05:31 PM Era capaz de ser boa ideia só inicializar o vector depois de leres o valor do n. Rui Carlos Gonçalves 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