Jump to content

[Resolvido] Código quase completo - Ultima duvida


deathseeker25
 Share

Recommended Posts

Boas,

Como já devem ter lido estou a desenvolver um codificador numerico de texto e resolvi adaptar o código que o utilizador redhat me propôs (era o meu código inicial, com as devidas correcções).

Ora adientei uma linha ou outra para completar o código, assim como algumas melhorias e avanços ou novas regras no código matemático.

O problema é que na execução do programa, só codifica a primeira palavra, seja ela do tamanho que for. Se escrevermos "Heeeeellllllooooooooooooo" ele codifica correctamente. Se escrevermos "sou eu" só codifica "sou".

Aqui fica o código para quem se dispuser a ajudar:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 5000

// static char text [MAX];
// static int serial;

/* Aqui come?ßa a fase de estrutura?ß?£o do c??digo
que vai servir de apoio para a conversao das diferentes
letras em numero. A serial fui eu que elaborei e inventei
e s?? contem algarismos de 1 a 5, sendo atribuido um conjunto
de 5 numeros diferentes a cada letra do alfabeto. */


int corresponde(char c)
{
  int serial = 0;
  
  switch (c)
  {
    case 'a' : serial=12345;  break;
    case 'b' : serial=22345;  break;
    case 'c' : serial=32345;  break;
    case 'd' : serial=42345;  break;
    case 'e' : serial=52345;  break;
    case 'f' : serial=23345;  break;
    case 'g' : serial=24345;  break;
    case 'h' : serial=25345;  break;
    case 'i' : serial=23445;  break;
    case 'j' : serial=23545;  break;
    case 'k' : serial=23455;  break;
    case 'l' : serial=33455;  break;
    case 'm' : serial=43455;  break;
    case 'n' : serial=53455;  break;
    case 'o' : serial=44455;  break;
    case 'p' : serial=45455;  break;
    case 'q' : serial=44555;  break;
    case 'r' : serial=54555;  break;
    case 's' : serial=55555;  break;
    case 't' : serial=11555;  break;
    case 'u' : serial=12555;  break;
    case 'v' : serial=13555;  break;
    case 'w' : serial=14555;  break;
    case 'x' : serial=15555;  break;
    case 'y' : serial=25555;  break;
    case 'z' : serial=35555;  break;
    case '0' : serial=12341;  break;
    case '1' : serial=22341;  break;
    case '2' : serial=32341;  break;
    case '3' : serial=42341;  break;
    case '4' : serial=52341;  break;
    case '5' : serial=53341;  break;
    case '6' : serial=54341;  break;
    case '7' : serial=55341;  break;
    case '8' : serial=55441;  break;
    case '9' : serial=55541;  break; 
    case ' ' : serial=55551;  break;
   }

  return serial;
}

/*Fun?ß?£o main-->a principal que executa o codigo*/   

main()
{
    char texto[MAX]; 
    int resultado[MAX];
    int comp=0;
    int var=0;

    printf("Introduza o texto: \n");
    scanf("%s", texto) ;
    
    strlwr(texto); /*converte o texto todo para minusculas.
                    Distinçao entre minusculas e maiusculas
                    so na proxima versao.*/     
    
    while( comp!=strlen(texto))
    {
      resultado[comp] = corresponde(texto[comp++]);
  
    }

    while(var!=comp)
    { 
      printf("%d",resultado[var++]);
      
    }

    printf("\n");

    
    system("PAUSE");
    return 0;
} 

Desde já o meu obrigado a quem se dispuser a oferecer ajudas.

Cumps

Link to comment
Share on other sites

Basta alterares o teu scanf para:

scanf("%[^\n]s", texto);

Tenta 😄

Funcionou....agora gostava de saber quais as vantagens de utilizar o scanf dessa forma e porquê...é que realmente não percebi.

Cumps e obrigado pela ajuda Bruno :)

Link to comment
Share on other sites

Embora n esteja em linux (e portanto n pude verificar):

Se fizeres:

scanf(" %[^a]s ", texto) ;

E escreveres "bca" na variavel texto fica "bc" isto é o "[^...]" diz até onde ele deve considerar! Podes tb fazer coisas mais giras do genero:

scanf(" %[^ \n\\\"]s ", texto) ;

Isto faria com q o texto ficasse com o inserido até ocorrer algo entre " ", "\n", "\" (estão duas para ele reconheçer o caracter especial bem) e " " "!

Espero q tenha sido explicito 😄

Link to comment
Share on other sites

epah isso eh mto mto bom... mas..... (claro tem um mas) isso tem alturas em que estoura! 😄

Eu sei pk ja fiz um trabalho (tenho de falar com o meu partner que o fez a ver se podemos publicar em opensource) e que precisei de eliminar esses \0 (sim.. burrice... pk k o espaço e o final de linha tinham de ter o mm significado... humpf)

Anyways, eu fiz uma funcaozeca que salta os espaços! por acaso tava funcional! 😄

Eu dp posto! Tou a fazer as malas and then.. BRAGAAAAAAAAAAA!!!! Ja vos respondo a partir do Departamento de Informatica :)

Abraço!

Software is like sex... it's better when it's free

in the old days

P@P "C" && "Linux" Moderator

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
 Share

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