thinkabout Posted March 16, 2013 at 10:52 PM Report #499431 Posted March 16, 2013 at 10:52 PM Boas Pessoal, Podiam-me dar uma mãozita, ando-me a iniciar nos ponteiros mas ainda ando completamente perdido. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <ctype.h> #define TAM 3 // Para a verificação ser menor /* Desenvolva uma função que verifique se uma sequência de caracteres representa um número de telefone da rede fixa PT. A sequência deve obedecer à seguinte propriedade: - É composta por 9 caracteres, em que o primeiro representa o dígito 2 e os restantes qualquer um dos 10 dígitos existentes. A declaração da função é a seguinte: void verifica(char *tel, char *c); O argumento tel aponta para o primeiro elemento da sequência de caracteres que representa o número de telefone (existe um ‘\0’ no final) e o argumento c aponta para uma variável do tipo caracter onde deve ser colocado o resultado da avaliação. Se o número de telefone analisado for válido deve aí ser colocado o caracter ‘V’. Caso contrário, deve ser colocado o caracter ‘I’. Nota: pode utilizar a função int isdigit(char c); da biblioteca <ctype.h>. Devolve um valor diferente de 0 se o argumento c for um caracter que represente um dígito. */ void verifica(char *tel, char *c) { int i = 0,digito=0; for (i = 0; i < TAM; i++) { if (isdigit(tel[i])) { digito++; } } if (digito == TAM) { puts("É número de telefone"); } else { puts("Nao é número de telefone"); } } int main() { int x; char tel[TAM], verificacao; for(x=0;x<TAM;x++) { printf("introduza um numero de telefone\n"); scanf("%d",&tel[x]); } verifica(tel, &verificacao); }
Marzkor Posted March 16, 2013 at 11:17 PM Report #499436 Posted March 16, 2013 at 11:17 PM Mas qual é a tua duvida?
thinkabout Posted March 16, 2013 at 11:22 PM Author Report #499438 Posted March 16, 2013 at 11:22 PM Não sei se estou a ir no caminho correcto, e quando corro o código ele da-me sempre que não é numero de telefone, e diz que stack around "tel" está corrupto. Não sei se estou a mandar os valores correctamente para dentro da função, não sei se a estou a usar bem o isdigit.
Marzkor Posted March 17, 2013 at 12:31 AM Report #499441 Posted March 17, 2013 at 12:31 AM (edited) for(x=0;x<TAM;x++) { printf("introduza um numero de telefone[b]\n[/b]"); scanf("%d",&tel[x]); } Tas a fazer %d num array de char. Em vez de for(x=0;x<TAM;x++) { printf("introduza um numero de telefone[b]\n[/b]"); scanf("%d",&tel[x]); } usa printf("introduza um numero de telefone\n"); scanf("%[^\n]",&tel); Edited March 17, 2013 at 12:44 AM by Marzkor
thinkabout Posted March 17, 2013 at 12:55 AM Author Report #499444 Posted March 17, 2013 at 12:55 AM (edited) Está-se a compor, agora só falta certificar que o primeiro digito é 2. for(x=0;x<TAM;x++) { printf("introduza um numero de telefone\n"); scanf("%c", &tel[x]); fflush(stdin); } Já me verifica bem a questão dos dígitos, agora faltam os outros detalhes vou tentar afinar isso. Não compreendo ainda esse scanf printf("introduza um numero de telefone\n"); scanf("%[^\n]",&tel); ----- edit Humm, não faz muito sentindo receber o digito um a um. A tua forma é mais lógica recebo a string toda de uma vez mas não entendo esse sinal, vou ver o que significa. De qualquer forma ele recebe bem a string e corre bem a verificação contudo dá erro stack around variable "tel" got corrupted ----- edit 2 Se aumentar o tamanho em +1, ganho o espaço para '\n' e deixo de ter problemas, agora é so afinar o resto do código. Edited March 17, 2013 at 01:15 AM by thinkabout
Marzkor Posted March 17, 2013 at 01:45 AM Report #499447 Posted March 17, 2013 at 01:45 AM (edited) Então já esta tudo resolvido? O normal é usar %s Mas %[^\n] Lê tudo menos o enter (\n). Se não no final da string tinhas \n \0, com (%s). Edited March 17, 2013 at 01:46 AM by Marzkor
thinkabout Posted March 17, 2013 at 01:58 AM Author Report #499448 Posted March 17, 2013 at 01:58 AM Ando a lutar com o char agora. 'char *' differs in levels of indirection from 'int void verifica(char *tel, char *c) { int j = 0,digito=0; if(tel[0] == '2') // Verifica o primeiro digito, como recebemos em char temos que usar o '2' { for (j = 0; j < TAM; j++) { if (isdigit(tel[j])) { digito++; } } printf("O numero de digitos e %d \n", digito); if (digito == TAM-1) { puts("E nr de telefone"); } } else { puts("Nao e nr de telefone"); c = 'i'; // <---- problema } } int main() { char tel[TAM], verificacao; printf("introduza um numero de telefone\n"); gets(tel); verifica(tel, &verificacao); }
Marzkor Posted March 17, 2013 at 02:02 AM Report #499449 Posted March 17, 2013 at 02:02 AM (edited) Não sei se o erro que tas a falar tem alguma coisa com isto, mas "isdigit" recebe um inteiro. Como mandas um char. http://www.elook.org/programming/c/atoi.html Edited March 17, 2013 at 02:10 AM by Marzkor
thinkabout Posted March 17, 2013 at 02:05 AM Author Report #499450 Posted March 17, 2013 at 02:05 AM (edited) Não posso usar a atoi, o meu problema não é na verificação do número esse já está tratado. O meu problema é aqui c = 'i'; // <---- problema Isto no main funciona bem , dentro da função não. No programa main quero ter um printf(%c", verificacao); Edited March 17, 2013 at 02:09 AM by thinkabout
Marzkor Posted March 17, 2013 at 02:09 AM Report #499451 Posted March 17, 2013 at 02:09 AM (edited) *c='i' lool Edited March 17, 2013 at 02:09 AM by Marzkor
thinkabout Posted March 17, 2013 at 02:09 AM Author Report #499452 Posted March 17, 2013 at 02:09 AM (edited) *c='i' lool Dammm i am so n00b. A bombar agora 😉 void verifica(char *tel, char *c) { int j = 0,digito=0; if(tel[0] == '2') // Verifica o primeiro digito, como recebemos em char temos que usar o '2' { for (j = 0; j < TAM; j++) { if (isdigit(tel[j])) { digito++; } } // printf("O numero de digitos e %d \n", digito); if (digito == TAM-1) { // puts("E nr de telefone"); *c = 'V'; } } else { // puts("Nao e nr de telefone"); *c = 'I'; } } int main() { char tel[TAM], verificacao; printf("introduza um numero de telefone\n"); gets(tel); verifica(tel, &verificacao); printf("O numero de telefone e %c \n" , verificacao); } Edited March 17, 2013 at 02:14 AM by thinkabout
Marzkor Posted March 17, 2013 at 02:13 AM Report #499453 Posted March 17, 2013 at 02:13 AM (edited) Tas é fritado. Boa Noite 😁 Edited March 17, 2013 at 02:14 AM by Marzkor
thinkabout Posted March 17, 2013 at 02:16 AM Author Report #499454 Posted March 17, 2013 at 02:16 AM Yep vou fechar a pestana, amanha à mais , ainda ando a nadar um bocado nos ponteiros. Grato pela ajuda.
HappyHippyHippo Posted March 17, 2013 at 11:06 AM Report #499464 Posted March 17, 2013 at 11:06 AM xii ... que complicação ... #include <stdio.h> #include <string.h> // TAM = 10 (9 para os dígitos e 1 para o '\0' #define TAM 256 void verifica(char *tel, char *c) { long check = 0; // úma única linha ... (se bem com várias verificações) *c = strlen(tel) != 9 || sscanf(tel, "%ld", &check) != 1 || check < 200000000 || check > 299999999 ? 'I' : 'V'; } int main() { char tel[TAM], verificacao; // pedir o número printf("introduza um numero de telefone : "); fflush(stdout); // ler o número fgets(tel, TAM, stdin); // <------ usar sempre o fgets !!! // remove ro caracter de fim de linha lido pelo fgets if (tel[strlen(tel) - 1] == '\n') { tel[strlen(tel) - 1] = '\0'; } // cahamada da funçao de verificação verifica(tel, &verificacao); // apresentar resultado printf("O numero de telefone e %s\n" , verificacao == 'V' ? "valido" : "invalido"); } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
brunoais Posted March 17, 2013 at 08:50 PM Report #499501 Posted March 17, 2013 at 08:50 PM E cuidado com o segmentation fault! "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
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