vetor em c [RESOLVIDO]

13. Re: vetor em c [RESOLVIDO]

Elder Marco
eldermarco

(usa Fedora)

Enviado em 24/11/2012 - 20:02h

Olá,

Neste caso, você não precisa do vetor frase2. Você pode usar somente o frase que está bom. Outra coisa é que você poderia criar uma variável do tipo int, que guarda o comprimento da frase digitada e então iterar de 0 até o tamanho - 1. Isso evita que a função strlen seja chamada diversas vezes sem nenhuma necessidade.

[code]
...

int tamanho;

...

tamanho = strlen (frase);
for (i = 0; i < tamanho; i++)
printf ("%c", frase[i] - 5);

...
[code]

Outra coisa. Você não usou as variáveis teste e teste2 pra nada. Exclua elas. Não esqueça também de adicionar o cabeçalho string.h ao seu código-fonte porque a função strlen está definida nele.


  


14. Re: vetor em c [RESOLVIDO]

Elder Marco
eldermarco

(usa Fedora)

Enviado em 24/11/2012 - 20:03h

Eita, devo ter esquecido de fechar o code e agora os links para editar o post também não funcionam.. mas o código está logo acima dessa bagunça no HTML.


15. Re: vetor em c [RESOLVIDO]

Daniel
danielcrvg

(usa Slackware)

Enviado em 24/11/2012 - 20:07h

eu coloquei o -1 pq ele tava pegando um caracter a mais pra fazer a troca..


As variaveis eram so de teste mesmo, tem ate uns negocios comentados..

a strlen so vai ser chamada 1 vez nao???




16. Re: vetor em c [RESOLVIDO]

Elder Marco
eldermarco

(usa Fedora)

Enviado em 24/11/2012 - 20:15h

Se você não usa uma variável mais (ainda que tenha utilizado para teste), você deve excluir elas. Isso não irá fazer diferença na execução do seu código, mas num código mais grande, isso irá contribuir para deixar ele mais confuso.

Não, a função strlen será chamada toda vez que o for voltar a fazer a comparação. Ele irá fazer isso strlen(frase2) - 1 vezes, até que a condição se torne falsa e o loop termine. Eu não ser dizer, mas talvez o compilador seja capaz de perceber isso e otimizar o seu código, de maneira que essa função não seja executada. Mesmo assim, seria legal se tu não usasse. Mais uma vez, isso não influencia nos resultados finais. Trata-se apenas de uma boa prática de programação.


17. Re: vetor em c [RESOLVIDO]

Daniel
danielcrvg

(usa Slackware)

Enviado em 24/11/2012 - 21:02h

entendi..

no caso eu defino antes:


tamanho = (strlen(frase2)-1);

e utilizo a variavel tamanho la no indice, certo???

Valeu pela observacao, eu nao tinha me tocado q ela ia ser executada em todo loop, achei q so no 1 loop.


18. Re: vetor em c [RESOLVIDO]

Daniel
danielcrvg

(usa Slackware)

Enviado em 26/11/2012 - 01:18h

Entao, eu concordo com vc em relacao ao compilador colocar automaticamente o '\n' logo em seguida do ultimo caracter, em relacao tambem a questao de usar apenas 1 variavel para fazer a troca, e tambem de declarar a variavel com o tamanho do indice..

So que o que esta acontecendo é o seguinte:

No momento que o usuario coloca a sua frase:

Mensagem: aaaa

O programa ira retornar:

Mensagem Criptografada: \\\\

Isto ocorre justamente por eu colocar o '-1' naquela srtlen().

Se eu tirar o '-1':

Vai acontecer isto:

Mensagem: aaaa

Retorno do programa sera parecido com algo assim:

Mensagem Criptografada: \\\\#

Ou seja, ele esta imprimindo o "n" que o compilador coloca automaticamente no final da string..

Testa o codigo abaixo, ou pelo link: http://codepad.org/kEmg7qQZ



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

void main()
{

int i;
char frase[50];
char frase2[50];


printf("\nMensagem: ");
fgets(frase,50,stdin);

strcpy(frase2,frase);

printf("\nMensagem Criptografada: ");
for (i=0; i < ((strlen(frase2))-1) ; i++) {
printf("%c",frase2[i]-5);
}
printf("\n\n");


system("PAUSE");
return 0;
}









19. Re: vetor em c [RESOLVIDO]

Elder Marco
eldermarco

(usa Fedora)

Enviado em 27/11/2012 - 09:29h


Entao, eu concordo com vc em relacao ao compilador colocar automaticamente o '\n' logo em seguida do ultimo caracter (...)


Não, eu disse o caractere nulo (uma contra-barra seguida de um zero. Não dá pra colocar aqui no fórum que por algum motivo, aparece uma coisa estranha no lugar, quando eu salvo.). Toda string que se preze deve terminar com esse caractere.


No momento que o usuario coloca a sua frase:

Mensagem: aaaa

O programa ira retornar:

Mensagem Criptografada: \\\\

Isto ocorre justamente por eu colocar o '-1' naquela srtlen().

Se eu tirar o '-1':

Vai acontecer isto:

Mensagem: aaaa

Retorno do programa sera parecido com algo assim:

Mensagem Criptografada: \\\\#

Ou seja, ele esta imprimindo o "n" que o compilador coloca automaticamente no final da string..


Não consegui acessar o código que você me passou no momento em que tentei. No entanto, escrevi aqui um código simples que funciona: http://paste.stg.fedoraproject.org/2001/

Se você entrar com a mensagem 'aaaaa' ele irá imprimir '\\\\\'. Testei aqui. Dá uma olhada.


20. Re: vetor em c [RESOLVIDO]

Daniel
danielcrvg

(usa Slackware)

Enviado em 27/11/2012 - 11:10h

O seu codigo tambem esta imprimindo o caracter nulo...

Eu digito: aaa
ele retorna: aaa#(este ultimo caracter representa um simbolo esquisito)

Depois q eu coloco o -1 la na variavel tamanho ele fica certo..

aaa
retorna: \\\


Acho que varia de computador pra computador, mas em fim, obrigado pelas consideracoes em relacao a declaracao de uma variavel com a funcao strlen, bem como os outros comentarios referentes a boa pratica de programacao...
Vou fecha este topico..
Mais uma vez obrigado a todos pela colaboracao,

Daniel.





21. Re: vetor em c [RESOLVIDO]

Elder Marco
eldermarco

(usa Fedora)

Enviado em 27/11/2012 - 11:16h

Hmm, estranho. Isso não ocorre por aqui. Depois tentarei encontrar uma máquina com Windows para testar por lá também. =)



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts