Jump to content
Mandref

Converter números em letras

Recommended Posts

Mandref

Boas,

tenho um trabalho que é para fazer como os nossos telemóveis: introduz-se números e ele procura o número e pelas letras (número 2 pode ser 'A', 'B' ou 'C'...). Ainda estou no começo e estou a tentar, apenas, pelos nomes. Queria saber porque o meu código, quando coloco números para pesquisa, ele não imprime o nome da letra que é assumida!

O que tenho:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct contacto TELE;
struct contacto {

char firstName[100];
char lastName[100];
char number[20];
TELE *prox;
};
TELE *inicio;
TELE *fim;
// Armazenar espaço de memória do tamanho struct telemovel
void FLVazia() {

TELE *aux;
aux = (TELE *) malloc(sizeof(TELE));
inicio = aux;
fim = inicio;
}
// Insere nome (primeiro e último) e número
void inserir(char pNome[], char uNome[], char num[]) {

TELE *aux;
aux = (TELE *) malloc(sizeof(TELE));
strcpy(aux->firstName, pNome);
strcpy(aux->lastName, uNome);
strcpy(aux->number, num);
fim->prox = aux;
fim = fim->prox;
aux->prox = NULL;
}
// Função de pesquisa
void pesquisar() {
int x = 0;
char letra;
char numOUletra[10];
printf("Insira os numeros: ");
scanf("%s", numOUletra);

for (int i = 0; i < 10; i++) {
 x = numOUletra[i];
 printf("%d: x = %d\n", i, x);
 switch (x) {
  case 50: // 50 porque é o código ASCII de '2'
   letra = 'A';
   procurar(letra);
   break;
 }
}
}
void procurar(char letra) {
TELE *aux;
int flag = 0;
char nome1[100];
aux = inicio->prox;

for (int i = 0; i < 100; i++) {
 strcpy(nome1, aux->firstName);
 if (nome1[i] == letra) { // Se encontrou A letra no nome:
  printf("%s", nome1);
  flag = 1;
  aux = NULL;
 } else {
  aux = aux->prox;
 }
}
if (flag = 0) {
 printf("Não existe na lista.");
}

}

int main(void) {

char pNome[100], uNome[100], num[20];
int nVezes = 0;
       printf("Quantos contactos irá inserir? ");
scanf("%d", &nVezes);

FLVazia();
for (int i = 0; i < nVezes; i++) {
 printf("Insira o pNome: ");
 scanf("%s", pNome);
 printf("Insira o uNome: ");
 scanf("%s", uNome);
 printf("Insira o numero: ");
 scanf("%s", num);
 inserir(pNome, uNome, num);
}
       printf("Quem quer pesquisar? ");
pesquisar();

Edited by thoga31
Tags code + GeSHi

Share this post


Link to post
Share on other sites
pwseo

Coloca o teu código dentro das tags CODE, de preferência bem indentado. Utiliza o modo de edição básico do editor (clicas no botão do canto superior esquerdo) para fazeres isso.

De seguida, coloca a tua dúvida sob a forma de uma questão, porque pelo que vi só disseste o que tens que fazer e mostraste o código que tens feito até agora.

Share this post


Link to post
Share on other sites
thoga31

Eu já o tinha feito, retiraste a indicação da linguagem para que fosse feito highlight. Já o repus. Vê como é que fiz, mas não alteres.

Agora, coloca a tua dúvida de forma clara. Qual foi o input que utilizaste, qual foi o output obtido e qual era o output esperado?


Knowledge is free!

Share this post


Link to post
Share on other sites
Mandref

Eu coloco os nomes MARIA FERREIRA e JOAO PEDROSO e números 1 e 2, respetivamente.

Depois no "Insira os numeros", em pesquisar(), coloco o numero 2 e dá "EXC_BAD_ACCESS". Pela maneira como tenho o código, insiro o número '2', ele entra no switch e assume que letra = 'A'. Ai ele vai para procurar(char letra) e como ele encontra nome1 == letra ele deveria imprimir os nomes imprimidos.

Não entendo o meu erro.

Share this post


Link to post
Share on other sites
HappyHippyHippo

tens dois elementos na lista :

for (int i = 0; i < 100; i++) {
 // se ... então
  aux = NULL;
 // ou
  aux = aux->prox;
 // fim
}

de uma ou de outra maneira irás ter sempre acessos inválidos à memória


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

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

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