Jump to content

[Resolvido] Número de telefone - Ponteiros


thinkabout

Recommended Posts

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);
}
Link to comment
Share on other sites

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 by Marzkor
Link to comment
Share on other sites

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 by thinkabout
Link to comment
Share on other sites

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);
}
Link to comment
Share on other sites

*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 by thinkabout
Link to comment
Share on other sites

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