Olá!
Estou postando para informar á vocês que trocarei de blog. Continuarei no blogger, mas agora meu endereço será http://soragamer.blogspot.com/ . Todas as postagens já foram passadas para o outro blog e continuarei com o tutorial e tudo que comecei nesse aqui.
Visitem meu outro blog.
Nesse não haverá mais próximo post, mas no outro haverá, então até o proximo post no meu novo endereço. :)
http://soragamer.blogspot.com/
Parceiros: Em breve estarei disponibilizando os links para os novos banners.
Tutorial de C - Parte 8 - Ponteiros (2ª Parte)
Postado por
Sora
Ponteiros e Matrizes
Ponteiros e matrizes estão fortemente ligados um ao outro. Um nome de uma matriz sem um índice é um ponteiro para o primeiro elemento dessa matriz. Como no caso:
Pode-se dizer que:
Esse caso so torna verdadeiro porque o endereço do primeiro elemento de uma matriz é igual ao da matriz.
O ponteiro funciona como se estivesse realmente apontando para os elementos de uma matriz e isso acaba se tornando muito útil em vários casos. Veja este exemplo onde é usado um ponteiro para atribuir o valor 49 ao sexto elemento de uma matriz denominada casa.
Tanto o comando p[5]=49 quanto *(p+5) = 49 atribuem este valor ao sexto elemento de casa, a diferença é que no primeiro caso é utlizado apenas o índice e no segundo aritmética de ponteiro. E não se esqueça que o índice 5 é realmente o sexto elemento da matriz, pois ela se inicia em 0 e não em 1.
Geralmente a aritmética de ponteiros é mais utilizada por ser um método mais rápido.
Veja o seguinte exemplo:
Nesse caso, p1 foi inicializado com o endereço do primeiro elemento da matriz str.
Matrizes de Ponteiros
Como qualquer tipo de dado, os ponteiros também podem ser organizados em matrizes.
declara uma matriz de ponteiros int com o tamanho 10. Para atribuir o endereço de uma variável a algum elemneto da matriz, basta fazer:
Nesse caso o endereço de uma variável inteira chamada var foi atribuído ao terceiro elemento da matriz de ponteiros x.
Indireção Múltipla
Indireção Múltipla ou ponteiros para ponteiros ocorre quando se tem um ponteiro apontando para outro que aponta para o valor final. Ponteiros para ponteiros podem acabar gerando problemas e raramente são necessarios.
Quando uma varíavel for um ponteiro para um ponteiro, ela deve ser declarada como tal, colocando-se um * adicional na frente do nome da variável. Veja o seguinte exemplo:
Nesse caso foi declarado um ponteiro para um ponteiro do tipo float chamado pont. Nesse caso pont não será um ponteiro para um número em ponto flutuante e sim um ponteiro para um ponteiro float.
Para acessar o valor final, ou seja, o valor que será apontado indiretamente pelo ponteiro para ponteiro também deve ser utilizado o operador asterisco duas vezes. Digite e execute o seguinte exemplo:
Neste código, p é declarado como um ponteiro para um inteiro e q como um ponteiro para um ponteiro para um inteiro. No final deve ser impresso o número 10 na tela.
Ponteiros e matrizes estão fortemente ligados um ao outro. Um nome de uma matriz sem um índice é um ponteiro para o primeiro elemento dessa matriz. Como no caso:
char p1[10];
Pode-se dizer que:
p1 == &p[0]
Esse caso so torna verdadeiro porque o endereço do primeiro elemento de uma matriz é igual ao da matriz.
O ponteiro funciona como se estivesse realmente apontando para os elementos de uma matriz e isso acaba se tornando muito útil em vários casos. Veja este exemplo onde é usado um ponteiro para atribuir o valor 49 ao sexto elemento de uma matriz denominada casa.
int *p, casa[10];
p = casa; //Aqui p começa a apontar para a matriz casa
p[5] = 49;
*(p+5) = 49;
Tanto o comando p[5]=49 quanto *(p+5) = 49 atribuem este valor ao sexto elemento de casa, a diferença é que no primeiro caso é utlizado apenas o índice e no segundo aritmética de ponteiro. E não se esqueça que o índice 5 é realmente o sexto elemento da matriz, pois ela se inicia em 0 e não em 1.
Geralmente a aritmética de ponteiros é mais utilizada por ser um método mais rápido.
Veja o seguinte exemplo:
char str[80], *p1;
p1 = str;
Nesse caso, p1 foi inicializado com o endereço do primeiro elemento da matriz str.
Matrizes de Ponteiros
Como qualquer tipo de dado, os ponteiros também podem ser organizados em matrizes.
int *p[10];
declara uma matriz de ponteiros int com o tamanho 10. Para atribuir o endereço de uma variável a algum elemneto da matriz, basta fazer:
x[2] = &var;
Nesse caso o endereço de uma variável inteira chamada var foi atribuído ao terceiro elemento da matriz de ponteiros x.
Indireção Múltipla
Indireção Múltipla ou ponteiros para ponteiros ocorre quando se tem um ponteiro apontando para outro que aponta para o valor final. Ponteiros para ponteiros podem acabar gerando problemas e raramente são necessarios.
Quando uma varíavel for um ponteiro para um ponteiro, ela deve ser declarada como tal, colocando-se um * adicional na frente do nome da variável. Veja o seguinte exemplo:
float **pont;
Nesse caso foi declarado um ponteiro para um ponteiro do tipo float chamado pont. Nesse caso pont não será um ponteiro para um número em ponto flutuante e sim um ponteiro para um ponteiro float.
Para acessar o valor final, ou seja, o valor que será apontado indiretamente pelo ponteiro para ponteiro também deve ser utilizado o operador asterisco duas vezes. Digite e execute o seguinte exemplo:
#include<stdio.h>
void main (void)
{
int x, *p, **q;
x = 10;
p = &x;
q = &p;
printf("%d", **q);
}
Neste código, p é declarado como um ponteiro para um inteiro e q como um ponteiro para um ponteiro para um inteiro. No final deve ser impresso o número 10 na tela.
***************************************************************************
Este é o fim desta parte do tutorial. Na próxima parte, será abordada uma das principais funções dos ponteiros em C, a alocação dinâmica e uma conclusão para seguir para a próxima parte do tutorial.
Em caso dúvidas, críticas, elogios ou sugestões, entrem em contato.
O atraso é devido á semana de provas+projetos+apresentações na faculdade.
Até o próximo post!!! :)
Em caso dúvidas, críticas, elogios ou sugestões, entrem em contato.
O atraso é devido á semana de provas+projetos+apresentações na faculdade.
Até o próximo post!!! :)
Call of Duty: Modern Warfare 2 - Polêmica no mundo dos games
Postado por
Sora
Polêmica no mundo gamerExtraído do site PC Magazine Brasil. Link da Notícia.
28/10/2009 20:25:56
Por Fernando Souza Filho
E lá vem mais polêmica por aí no mundo dos games. O esperadíssimo lançamento de Call of Duty: Moderno Warfare 2 está programado para o dia 10 de novembro, mas a polêmica já começou antes. Um fã conseguiu uma cópia do jogo antes de seu lançamento e fez um vídeo caseiro de uma polêmica fase em que ele controla um terrorista que abre fogo contra inocentes em um aeroporto.
O vídeo já foi removido pela Activision, desenvolvedora do game, que precisou se pronunciar oficialmente sobre o ocorrido. "A cena mostra a maldade e o sangue frio de um vilão russo e sua equipe. Ao estabelecer esse grau de maldade, o jogador percebe a urgência da missão em que ele precisa detê-los. Os jogadores têm a opção de pular essa cena. No começo do jogo, há dois checkpoints onde o jogador é avisado de que algumas pessoas podem considerar os eventos seguintes perturbadores. Esses checkpoints também podem ser desabilitados", disse a nota oficial da empresa.
"Modern Warfare 2 é um jogo fictício de ação feito com uma jogabilidade intensa e realista que reflete os conflitos da vida real, semelhante aos filmes de ação. Ele é classificado para maiores de 18 anos por conta das cenas violentas", alertou a empresa.
Além da polêmica fase com terroristas, o jogo tem uma fase que se passa no Rio de Janeiro, com uma violenta invasão a uma favela carioca. Call of Duty: Modern Warfare 2 será lançado para PC, Xbox 360 e PlayStation 3.
*************************************************************************************
Mais um game polêmico está sendo lançado e dessa vez não é por pouca coisa. Realmente uma fase onde você joga com um terrorista e abre fogo contra inocentes é uma coisa bem... vamos dizer... cruel.
Sinceramente, eu achei essa fase um tanto desnecessária, dava pra fazer alguma coisa sem ser tão explícito assim. Eu já vi casos em que o jogador pode controlar terroristas e matar pessoas que nem se tornaram polêmicos, porque são coisas que passam praticamente despercebidas.
Não vi o vídeo, mas parece dessa vez pegaram pesado e sabiam disso, pois essa cena foi até colocada como alternativa. O problema é que muita gente que não deveria estar com esse jogo em mãos (menores de 18, principalmente as crianças) vão estar e jogar e no primeiro atentado terrorista a mídia vai cair em cima do Modern Warfare mesmo que o cara nunca tenha jogado isso na vida ou se em meio a milhares de jogos na casa do terrorista encontrem esse e mais algum desses GTA da vida.
Sobre a fase no Brasil não tenho muito a comentar. Só sei que muitos brasileiros devem estar curiosos sobre essa fase que será numa favela, a missão certamente não vai ser fácil.
Será que as pessoas dos outros países acham que aqui só tem floresta e favela? Não sei, mas acho que a impressão que o Brasil passa é realmente essa. : \
So, that's it. :P
Até o próximo post!
ESA: Número recorde de aulas de Desenvolvimento de Games oferecidas nos EUA
Postado por
Sora
Ao ler esta notícia, achei bem legal o fato do mercado de games estar crescendo, mas aqui no Brasil infelizmente não vejo muito isso. É certo que atualmente essa área vem sendo mais valorizada no Brasil, mas o que eu sinto falta são de cursos, existem poucos cursos voltados para isso no Brasil, principalmente graduação. Além do fato de que gente interessada é o que não falta.
De acordo com uma reportagem recentemente publicada pela Entertainment Software Association, faculdades em 37 estados ( e o Distrito de Columbia) atualmente estão oferecendo 254 cursos em design de vídeo games, arte e programação. Pode parecer uma quantidade pequena, mas é bem mais do que os 200 programas oferecidos ano passado. Nós deveríamos dizer qual aumento na porcentagem representa, mas nós não tivemos muitas aulas de matemática na escola.
Rich Taylor, vice presidente senior de comunicações e assuntos da indústria da ESA, disse que esses dados são indicativos de "a importância da indústria de video games, que está bem equilibrada para criar empregos adicionais e oportunidades profissionais nos próximos anos". Nós apenas os vemos como incubadoras escolares para a nova geração de Schafers, Carmacks e Wrights.
Fonte: Joystiq.com - Link da Notícia Original
Mas tudo bem, quem estiver muito interessado em seguir essa área, pode estudar por conta própria (na internet tem muito material pra ajudar) ou então correr atrás de algum desses cursos que temos por aqui. Basta decidir em qual área você pretende atuar ao desenvolver jogos.
Até o próximo post! :)
Tokyo Game Show 2009
Postado por
Sora

Lá são exibidas várias novidades, como as mais novas tecnologias que estão sendo desenvolvidas, itens para colecionadores e o principal, que são os novos games. Uma das maiores diferenças do Tokyo Game Show em relação a outros eventos do tipo é que os últimos dias são abertos ao público.
Este ano o evento ocorreu desde o dia 24/09 até o dia 27/09 (hoje).
Confira um pouco do que rolou por lá:

Silent Hill Shattered Memories para PSP

Bayonetta

Splinter Cell: Conviction

Cosplayers

Cosplayers

Itens especiais á venda

Boneco Cloud Strife

Bonecos Chris Redfield e Sheva Alomar

Bonecos Snoopy
*Fonte das imagens: Joystiq.com
Uma curiosidade: O Tokyo Game Show 2009 estará usando "green power" ou enregia verde - assim como no ano passado para contribuir com a conservação do meio ambiente. Todos os 280,000 KWh de energia consumida nas áreas comuns do show serão geradas por uma usina de biomassa. A redução do impacto ao CO2 desta "energia verde" será de 119 toneladas, quase equivalente a quantidade absorvida em um ano por uma floresta de cedros japonesa de 14.1 hectares cultivada a 40 anos ( calculado baseado na quantidade da intensidade da emissão de CO2 da Compania de Energia Elétrica de Tokyo em 2007: 0.425Kg - CO2/kWh).
Parabéns pra eles que além de estarem exibindo tantos games ótimos ainda estão contribuindo para a preservação do meio ambiente. :)
Site do evento: http://expo.nikkeibp.co.jp/tgs/2009/en/
Tutorial de C - Parte 8 - Ponteiros (1ª Parte)
Postado por
Sora
Um ponteiro é uma variável que contém um endereço de memória. Este endereço normalmente é a posição de uma outra variável na memória. Se uma variável contém o endereço de outra, então a primeira variável "aponta" para a segunda.
Variáveis Ponteiros
Se uma variável irá conter um ponteiro, ela deve ser declarada como tal. A declaração de um ponteiro é feita da seguinte forma:
Onde tipo é qualquer tipo válido em C e nome é o nome da variável ponteiro.
O tipo de base do ponteiro define que tipo de variáveis ele irá poder apontar. Tecnicamente, qualque ponteiro pode apontar para qualquer lugar na memória, porém, toda a aritmética de ponteiros é feita por meio do tipo base, assim, é importante declarar o ponteiro corretamente.
Operadores de Ponteiros ( * e &)
O operador & devolve o endereço de memória da variável. Por exemplo:
coloca na variável m o endereço de memória que contém a variável count. Esse endereço é a posição da variável na memória e não tem relação nenhuma com o valor de count. Mais á frente será apresentado um exemplo que que define melhor esse conceito.
O operador *, por sua vez retorna o valor da variável localizada no endereço que o segue (não confunda com o sinal de multiplicação que utiliza o mesmo símbolo). Por xemplo, se m contém o endereço da variável count:
coloca o valor da variável count em q. Quando q = *m, pode-se dizer que "q recebe o valor que está no endereço m".
Expressões com Ponteiros
Atribuição
Veja o seguinte exemplo:
Neste exemplo, tanto p1 quanto p2 apontam para x. No final o endereço de x é mostrado por printf() usando o modificador %p, que faz com que seja apresentado um endereço no formato usado pelo computador.
Aritmética de Ponteiros
Apenas duas operações aritméticas podem ser feitas com ponteiros: adição e subtração.
Para entender como essas operações funcionam, vamos considerar que p1 é um ponteiro inteiro para o valor atual 2000 e que cada inteiro é de 2 bytes. Após a expressão:
p1 irá conter 2002, não 2001. Cada vez que p1 é incrementado, ele aponta para o próximo inteiro. O mesmo conceito é aplicado nas operações de subtração, sempre que subtraído o ponteiro aponta para o elemento anterior da sua base. Como as bases assumem valores diferentes em máquinas diferentes, esses valores sempre acabam variando.
Também poderia ser feito:
Nesse caso, p1 irá apontar para o décimo segundo elemento do tipo p1 adiante do elemento que ele está atualmente apontando.
Inicialização de Ponteiros
Assim que um ponteiro é declarado, antes que lhe sej atribuído um valor, ele contém um valor desconhecido. Se um ponteiro for usado antes de ser inicializado ele poderá causar erros um tanto desagradáveis tanto no programa quanto no próprio sistema operacional.
Muitos problemas podem ser evitados utilizando o valor nulo (zero) na inicialização dos ponteiros, mas mesmo assim é necessário ter muita cautela, pois isso não é garantia total de que o seu programa não vá ter problemas.
*************************************************************************************
Depois de duas semanas sem postar tutorial por estar afundada em provas e trabalhos, finalmente estou postando a oitava parte. Essa parte de ponteiros eu pretendo dividir em três, pois este é um assunto complexo que deve ser estudado com calma.
Mas não se preocupe, é só no início, pois depois que aprender a lidar com ponteiros pode até começar a preferir usá-los, pois muitas vezes eles permitem que o nosso código se torne mais eficiente.
É isso aí então.
Até o próximo post! :)
Variáveis Ponteiros
Se uma variável irá conter um ponteiro, ela deve ser declarada como tal. A declaração de um ponteiro é feita da seguinte forma:
tipo *nome; Onde tipo é qualquer tipo válido em C e nome é o nome da variável ponteiro.
O tipo de base do ponteiro define que tipo de variáveis ele irá poder apontar. Tecnicamente, qualque ponteiro pode apontar para qualquer lugar na memória, porém, toda a aritmética de ponteiros é feita por meio do tipo base, assim, é importante declarar o ponteiro corretamente.
Operadores de Ponteiros ( * e &)
O operador & devolve o endereço de memória da variável. Por exemplo:
m = &count;coloca na variável m o endereço de memória que contém a variável count. Esse endereço é a posição da variável na memória e não tem relação nenhuma com o valor de count. Mais á frente será apresentado um exemplo que que define melhor esse conceito.
O operador *, por sua vez retorna o valor da variável localizada no endereço que o segue (não confunda com o sinal de multiplicação que utiliza o mesmo símbolo). Por xemplo, se m contém o endereço da variável count:
q = *m;coloca o valor da variável count em q. Quando q = *m, pode-se dizer que "q recebe o valor que está no endereço m".
Expressões com Ponteiros
Atribuição
Veja o seguinte exemplo:
#include<stdio.h>
int main(){
int x;
int *p1, *p2;
p1 = &x1;
p2 = p1;
printf("%p", p2);
}
Neste exemplo, tanto p1 quanto p2 apontam para x. No final o endereço de x é mostrado por printf() usando o modificador %p, que faz com que seja apresentado um endereço no formato usado pelo computador.
Aritmética de Ponteiros
Apenas duas operações aritméticas podem ser feitas com ponteiros: adição e subtração.
Para entender como essas operações funcionam, vamos considerar que p1 é um ponteiro inteiro para o valor atual 2000 e que cada inteiro é de 2 bytes. Após a expressão:
p1++;
p1 irá conter 2002, não 2001. Cada vez que p1 é incrementado, ele aponta para o próximo inteiro. O mesmo conceito é aplicado nas operações de subtração, sempre que subtraído o ponteiro aponta para o elemento anterior da sua base. Como as bases assumem valores diferentes em máquinas diferentes, esses valores sempre acabam variando.
Também poderia ser feito:
p1 = p1 + 12;
Nesse caso, p1 irá apontar para o décimo segundo elemento do tipo p1 adiante do elemento que ele está atualmente apontando.
Inicialização de Ponteiros
Assim que um ponteiro é declarado, antes que lhe sej atribuído um valor, ele contém um valor desconhecido. Se um ponteiro for usado antes de ser inicializado ele poderá causar erros um tanto desagradáveis tanto no programa quanto no próprio sistema operacional.
Muitos problemas podem ser evitados utilizando o valor nulo (zero) na inicialização dos ponteiros, mas mesmo assim é necessário ter muita cautela, pois isso não é garantia total de que o seu programa não vá ter problemas.
*************************************************************************************
Depois de duas semanas sem postar tutorial por estar afundada em provas e trabalhos, finalmente estou postando a oitava parte. Essa parte de ponteiros eu pretendo dividir em três, pois este é um assunto complexo que deve ser estudado com calma.
Mas não se preocupe, é só no início, pois depois que aprender a lidar com ponteiros pode até começar a preferir usá-los, pois muitas vezes eles permitem que o nosso código se torne mais eficiente.
É isso aí então.
Até o próximo post! :)
Tutorial de C - Parte 7 - Jogo da Velha
Postado por
Sora
Nesta parte do tutorial estou postando um exemplo de Jogo da Velha retirado do livro C Completo e Total (3 Edição) do autor Herbert Schildt.
Digite e execute o código do exemplo e depois tente fazer modificações, como por exemplo um menu no início do jogo ou ao término do jogo exibir uma opção para reiniciar.
Digite e execute o código do exemplo e depois tente fazer modificações, como por exemplo um menu no início do jogo ou ao término do jogo exibir uma opção para reiniciar.
Link para download do código-fonte
No final, a aparência do seu jogo deve ser mais ou menos esta:


*************************************************************************************
Esta parte do tutorial tem como objetivo ajudar a fixação do conceito de matrizes, um jogo da velha é um bom exemplo do uso de matrizes.
Você também pode tentar desenvolver outros jogos simples, como por exemplo um campo minado.
Até o próximo post! :)
Você também pode tentar desenvolver outros jogos simples, como por exemplo um campo minado.
Até o próximo post! :)
Dim3
Postado por
Sora

Descrição:
Dim3 ou Dimension 3 é uma engine gratuita e de código aberto para a criação de jogos 3D em Mac-OS X criada por Brian Barnes.
Esta engine foi criada para todo tipo de usuário, desde iniciantes até avançados, pois não é necessário mexer com código-fonte da engine, tudo pode ser feito através de scripts.
Dim3 vem com um animador que pode importar vários formatos de modelos e um editor de mapas. Ambos possuem uma interface gráfica que facilita e agiliza o desenvolvimento do projeto.
Além disso, a engine já vem com uma aplicação que facilita a criação de jogos em rede.
Toda a customização é feita através de JavaScript. A engine usa OpenGl para os gráficos, OpenAL para o som, SDL para resolução da tela/entrada e SpiderMonkey (Mozilla) para a engine JavaScript.
A engine utilizada para rodar os jogos da dim3 é multiplataforma, funciona em OS X, Windows e algumas distribuições do Linux, mas suas ferramentas de criação são apenas para OS X.
Fonte: dim3
Licença: Freeware ( Com os devidos créditos)
Sistemas Operacionais:
Mac OS X
Windows (apenas execução)
Linux (apenas execução)
Website Oficial: http://www.klinksoftware.com/
Download:http://homepage.mac.com/ggadwa/KlinkSoftware/downloads/index.html
Jogos Feitos Utilizando a Engine:
- Xinvaders
- Tarmac
- Bloodrush
- Laz no Hitsujiban




Tutorial de C - Parte 6 - Strings
Postado por
Sora
Os Strings são matrizes unidimensionais (vetores) compostas de caracteres, obrigatoriamente terminadas por um caracter nulo, que pode ser representado por: '\0'. Por causa do caracter nulo, uma String deve ser sempre declarada com um caracter a mais do que elas devem guardar.
Em C não existe o tipo de dado string, mas ele permite constantes string, que são uma lista de caracteres entre aspas, como por exemplo: "alo mundo". No final das constantes string você não precisa adicionar o caracter nulo, pois o compilador já realiza esta tarefa para você.
Leitura e Escrita de Strings
Existem duas funções especiais que permitem ler e escrever strings no console.
A função gets() lê uma string inserida pelo teclado e coloca-a no endereço apontado por seu argumento ponteiro de caracteres. O usuário pode digitar a string e quando o botão para passar para a próxima linha for pressionado, a função automaticamente adiciona o caracter nulo ao final da string e a armazena.
Veja um exemplo do uso de gets().
A função puts() escreve seu argumento string na tela. Esta função conhece os mesmos códigos de barra invertida de printf(), mas uma chamada a puts() leva bem menos tempo do que printf() porque puts() só pode escrever strings de caractere. Digite e execute o seguinte exemplo:
A linguagem C contém uma grande variedade de funções de manipulação de strings. Para usar essas funções é necessário usar o cabeçalho padrão STRING.H. Conheça agora alguams dessas funções:
strcpy(s1, s2) - Copia s1 em s2.
strcat(s1, s2) - Concatena (junta) s2 ao final de s1.
strlen(s1) - Retorna o tamanho de s1.
strcmp(s1, s2) - Retorna 0 se s1 e s2 são iguais; menor que zero se s1s2;
strchr(s1, ch) - Retorna um ponteiro para a primeira ocorrência de ch em s1.
strstr(s1, s2) - Retorna um ponteiro para a primeira ocorrência de s2 em s1.
Scanset
Um scanset define um conjunto de caracteres que pode ser lido por scanf() e atribuído a matriz de caracteres correspondente. O scanset é definido colocando-se uma string dos caracteres a serem procurados entre colchetes.
Ao utilizar um scanset, scanf() continua a ler os caracteres digitados até que encontre um que não pertença ao scanset. A variável correspondente deve ser um ponteiro para uma matriz de caracteres. Para entender melhor, digite e execute o seguinte programa:
Digite 123abcdtye e pressione ENTER. O programa exibirá 123 abcd tye, pois assim que encontra o t ele finaliza a leitura coloca os caracteres restantes em str2. O símbolo ^ instrui scanf() a aceitar qualquer caractere que não está definido no scanset. E também pode ser usado um hífen entre os caracteres para especificar um caractere final e um inicial, como por exemplo:
Vale lembrar que scanset diferencia letras maiúsculas de minúsculas, ou seja, se necessário você deve especificar ambas separadamente.
Em C não existe o tipo de dado string, mas ele permite constantes string, que são uma lista de caracteres entre aspas, como por exemplo: "alo mundo". No final das constantes string você não precisa adicionar o caracter nulo, pois o compilador já realiza esta tarefa para você.
Leitura e Escrita de Strings
Existem duas funções especiais que permitem ler e escrever strings no console.
A função gets() lê uma string inserida pelo teclado e coloca-a no endereço apontado por seu argumento ponteiro de caracteres. O usuário pode digitar a string e quando o botão para passar para a próxima linha for pressionado, a função automaticamente adiciona o caracter nulo ao final da string e a armazena.
Veja um exemplo do uso de gets().
#include<stdio.h>
#include<string.h>
int main (){
char str[80];
gets(str);
printf("Você digitou %s", str);
return 0;
}
A função puts() escreve seu argumento string na tela. Esta função conhece os mesmos códigos de barra invertida de printf(), mas uma chamada a puts() leva bem menos tempo do que printf() porque puts() só pode escrever strings de caractere. Digite e execute o seguinte exemplo:
#include<stdio.h>
#include<string.h>
int main (){
puts("alo");
return 0;
}
A linguagem C contém uma grande variedade de funções de manipulação de strings. Para usar essas funções é necessário usar o cabeçalho padrão STRING.H. Conheça agora alguams dessas funções:
strcpy(s1, s2) - Copia s1 em s2.
strcat(s1, s2) - Concatena (junta) s2 ao final de s1.
strlen(s1) - Retorna o tamanho de s1.
strcmp(s1, s2) - Retorna 0 se s1 e s2 são iguais; menor que zero se s1
strchr(s1, ch) - Retorna um ponteiro para a primeira ocorrência de ch em s1.
strstr(s1, s2) - Retorna um ponteiro para a primeira ocorrência de s2 em s1.
Scanset
Um scanset define um conjunto de caracteres que pode ser lido por scanf() e atribuído a matriz de caracteres correspondente. O scanset é definido colocando-se uma string dos caracteres a serem procurados entre colchetes.
Ao utilizar um scanset, scanf() continua a ler os caracteres digitados até que encontre um que não pertença ao scanset. A variável correspondente deve ser um ponteiro para uma matriz de caracteres. Para entender melhor, digite e execute o seguinte programa:
#include<stdio.h>
int main (){
int i;
char str[80], str2[80];
scanf("%d%[abcedfg]%s", &i, str, str2);
printf("%d %s %s", i, str, str2);
return 0;
}
Digite 123abcdtye e pressione ENTER. O programa exibirá 123 abcd tye, pois assim que encontra o t ele finaliza a leitura coloca os caracteres restantes em str2. O símbolo ^ instrui scanf() a aceitar qualquer caractere que não está definido no scanset. E também pode ser usado um hífen entre os caracteres para especificar um caractere final e um inicial, como por exemplo:
%[A-Z]
Vale lembrar que scanset diferencia letras maiúsculas de minúsculas, ou seja, se necessário você deve especificar ambas separadamente.
*************************************************************************************
Para exercitar strings vá testando cada uma das funções de manipulação apresentadas neste tutorial e faça programas com leitura e escrita de strings junto com os conhecimentos já adquiridos até agora.
Até o próximo post! :)
Até o próximo post! :)
Assinar:
Postagens (Atom)



