ChicoCarvalho Posted March 21, 2012 at 10:52 PM Report #445025 Posted March 21, 2012 at 10:52 PM Tenho uma dúvida em relação ao uso de um atoi que vai converter argv[1][pos] em que pos era de 0 a 4. Seria int array[pos] = atoi(argv[1][pos]) num ciclo ate 4 com pos a incrementar. Mas por algum motivo nao da para compilar. Alguma ideia? Obrigado!
pikax Posted March 21, 2012 at 11:00 PM Report #445029 Posted March 21, 2012 at 11:00 PM Podes postar o código? Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
pmg Posted March 21, 2012 at 11:06 PM Report #445031 Posted March 21, 2012 at 11:06 PM A funcao atoi() quer como parametro uma string. O objecto argv[1][pos] é um char: por isso nao compila. O que queres exactamente? Por exemplo se a linha de comandos (depois do programa compilado) for ./a.out 6078? 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!
ChicoCarvalho Posted March 22, 2012 at 07:32 AM Author Report #445073 Posted March 22, 2012 at 07:32 AM O que eu queria era q em cada posicao do vector de inteiros tive o algarismo...
KTachyon Posted March 22, 2012 at 07:48 AM Report #445074 Posted March 22, 2012 at 07:48 AM Se esse é o teu problema, porque não resolves da forma óbvia? Crias uma função para isso: int my_atoi(char c) { if (c >= '0' && c <='9') return (int)(c - '0'); return -1; // error } “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
pmg Posted March 22, 2012 at 09:26 AM Report #445080 Posted March 22, 2012 at 09:26 AM ... if (c >= '0' && c <='9') ... Eu prefiro o isdigit() #include <ctype.h> ... if (isdigit((unsigned char)c)) ... 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!
Dr_Lion Posted March 22, 2012 at 01:24 PM Report #445143 Posted March 22, 2012 at 01:24 PM Atenção que segundo a minha ideia a função isdigit apenas te devolve o número correspondente a um caracter apenas, enquanto a função atoi, devolve um número com 2 ou mais digitos. No entanto porque estou a usar essa função agora e ela não me reconhece números com sinal negativo. Por exemplo: "-80" a função atoi devolve um int como 80.
pmg Posted March 22, 2012 at 02:17 PM Report #445150 Posted March 22, 2012 at 02:17 PM A função isdigit() devolve um indicador (0 (zero) para indicador falso; outra coisa para indicador positivo) se o valor passado é um digito. Não serve para converter strings em inteiros; "apenas" serve para usar numa rotina que faz a conversão para detectar caracteres inválidos. Por exemplo: "-80" a função atoi devolve um int como 80. O atoi("-80") tem de devolver -80! Se te devolve 80, estás a fazer qualquer coisa mal. int a = atoi("-80"); printf("a tem %d\n", a); Código completo no ideone. 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!
ChicoCarvalho Posted March 22, 2012 at 02:49 PM Author Report #445156 Posted March 22, 2012 at 02:49 PM Obrigado pela ajuda... Tenho mais uma duvida em relacao a um funcao que tenho um vector de inteiros e o quero retornar para na main o imprimir... A minha sugestao seria int[] funcao(....,...) e na main criar um int vec[4] = funcao(...,...); mas pelos visto esta algo mal na sintaxe.. Alguem me pode ajudar?
pmg Posted March 22, 2012 at 03:19 PM Report #445161 Posted March 22, 2012 at 03:19 PM Os arrays (vectores), em C, não são atribuiveis. Isto é não podes mudar o valor de um array como um todo, tens de o fazer elemento a elemento. A maneira correcta é passar o array para a função, e, dentro da função, alterar o valor dos elementos. Nota que o array é passado como um ponteiro para o primeiro elemento e, portanto, a informação de tamanho perde-se; convem passar o tamanho além do ponteiro. Para passar o array (como ponteiro) e o tamanho podes usar este exemplo int array[10] = {0}; fx(array, sizeof array / sizeof *array); Na função tratas o ponteiro exactamente como um array void fx(int array[], size_t size) { size_t k; for (k = 0; k < size; k++) { array[k] = k; } } Se quiseres "criar" o array dentro da função e passá-lo para trás, para a função chamadora, tens de usar malloc() e amigos ... mas o melhor é fazer a alocação atrás e passar o ponteiro como no exemplo acima. Edit para adicionar exemplo completo #include <stdio.h> int funcao(int vec[], size_t siz); /* prototipo --- int vec[] é exactamente igual a int *vec */ int main(void) { int vec[4]; /* 4 elementos nao inicializados; a inicializacao sera feita na funcao funcao */ funcao(vec, sizeof vec / sizeof *vec); /* inicializa vec */ for (int i = 0; i < 4; i++) { printf("O elemento de indice %d tem o valor %d.\n", i, vec[i]); } return 0; } int funcao(int vec[], size_t siz) { for (size_t i = 0; i < siz; i++) { vec[i] = i * i * i; } return 0; /* 0 indica que tudo correu bem. Pode ser ignorado na funcao que chama esta */ } 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!
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