Escolar Documentos
Profissional Documentos
Cultura Documentos
Leitura de string:
char a[100];
scanf(" %s", a);
char a[100];
scanf(" %[^\n]", a); //ou -> scanf(" %[^\n]s", a);
Obs1: Como demonstrado nos exemplos, sempre coloque um espaço antes da leitura de uma
string.
Obs2: Sempre declare o tamanho da string um pouco maior do que o tamanho que você
pretendia usar.
Neste caso, tam = 9, “boa” 3 caracteres, espaço 1 caracter, “prova” 5 caracteres, totalizando 9
caracteres.
strcpy é a função que copia uma string de uma variável e cola em outra variável:
O primeiro parâmetro do função strcpy é quem vai receber o valor do segundo parâmetro, então
a variável b se tornaria uma cópia da variável a , tendo então o valor “boa prova”.
strcmp é a variável de comparação de string:
Notem que com string não é mais possível fazer a verificação de igualdade com ==, como por
exemplo:
if(a == b){
printf("entrou!!\n");
}
isso nunca entrará, logo a forma de fazermos a comparação com duas strings mudará e então
será utilizada a função strcmp, que ficaria assim:
if(strcmp(a, b) == 0){
printf("entrou!!\n");
}
neste exemplo, a função strcmp, faria a verificação se a é igual a b, caso isso seja verdade a
função retorna 0, caso tivéssemos na nossa variável a a string ”aaa” e em nossa variável b a
string “ab”, o retorno da função seria -1, pois a string do primeiro parâmetro é menor (na ordem
alfabética) que a string do segundo parâmetro. E se caso nossa variável a tivesse a string “ab” e
nossa variável b tivesse a string “aaa”, o retorno da função seria 1, identificando que a string do
primeiro parâmetro é maior (na alfabética) que a string que está no segundo parâmetro.
Exemplos de casos de prova antigas nossas, que poderíamos adaptar para string e usar strcmp:
Suponha que guerreiro ganha de arqueiro, se usássemos com Char pegando apenas a primeira
letra dos nomes, e fizéssemos uma verificação para saber se char1 ganharia de char2, seria
simples, ficaria mais ou menos como essa verificação:
Mas e se pedirmos para você verificar a string inteira, ao invés de apenas uma letra?
Simples, supondo o mesmo exemplo de guerreiro e arqueiro, teríamos:
Leitura:
int linhas = 3;
int colunas = 3;
int matriz[linhas][colunas];
passando:
recebendo:
Se a matriz tem que ser percorrida como um mapa e é válido percorrer em qualquer posição
dentro da matriz, note que existem posições que seriam inválidas, ou seja, essas posições
estariam fora da nossa matriz. Suponham que os seguintes caracteres tem as seguintes
responsabilidade:
int linhas = 3;
int colunas = 3;
int matriz[linhas][colunas];
Se estivermos na linha inicial da nossa matriz, ou seja, matriz[0][j] tornasse inválido o comando
C, pois seria a subida de uma linha, e a posição matriz[-1][j] não existe.
Se estivermos na última linha da matriz, ou seja, matriz[linhas-1][j], tornasse inválido o comando
B, pois seria a descida de uma linha, e a posição matriz[linhas][j] não existe.
Se estivermos na coluna inicial da nossa matriz, ou seja, matriz[i][0] tornasse inválido o comando
E, pois se formos para a esquerda da coluna 0, ficaríamos na posição matriz[i][-1], que não
existe.
Se estivermos na última coluna da matriz, ou seja, matriz[i][colunas-1] tornasse inválido o
comando D, pois se formos para a direita da colunas-1, ficaríamos na posição matriz[i][colunas],
que não existe.
STRUCT
Com typedef:
typedef struct
{
/* data */
}NOME_STRUCT;
int main(){
NOME_STRUCT variavel;
return 0;
}
Sem typedef:
struct NOME_STRUCT
{
/* data */
};
int main(){
Em struct, falando de uma forma “grosseira”, você consegue colocar várias variáveis dentro de
uma só variável. Imagine que você quer fazer uma locadora, e quer armazenar os filmes, você
poderia fazer uma struct com coisas importantes sobre o filme, dentro da struct. Exemplo:
typedef struct
{
char nome[50]; //nome do filme
int ano; //ano do lançamento
double nota; //nota média do filme
}FILMES;
Mas surge a pergunta. Como faríamos pra ler essa variável? simples, veja o exemplo a seguir:
int main(){
FILMES filme;
return 0;}
Desta maneira (variavel.variavel), você acessa o local no qual deseja dentro da struc. Mas, note
que se fizer desta forma, só conseguiremos armazenar 1 filme em nossa struct, e se quisermos
adicionar mais, como fazemos? Simples, basta você dizer que essa sua variável do tipo struct é
um array, logo, cada posição do array vai ser um filme diferente. Exemplo de leitura:
int main(){
return 0;
}
Neste exemplo determinamos que terá um espaço para leitura de 5 filmes diferentes, mas
também é possível fazer um scanf para ler o valor de x, e ter mais filmes diferentes.
Passagem por parâmetro:
typedef struct
{
char nome[50]; //nome do filme
int ano; //ano do lançamento
double nota; //nota média do filme
}FILMES;
int main(){
FILMES filme;
funcao(&filme);
printf("nome: %s\nano: %d\nnota: %.2lf", filme.nome, filme.ano,
filme.nota);
return 0;
}
Note que na função em que definimos que nossa variável do tipo struct é um ponteiro, deixamos
de fazer a referencia(variavel.variavel) e começamos a fazer(variavel->variavel), mas na função
em que eu não declaro como ponteiro, na main por exemplo, eu continuo usando
(variavel.variavel).
Com array, e claro, também alterando os valores do endereço:
typedef struct
{
char nome[50]; //nome do filme
int ano; //ano do lançamento
double nota; //nota média do filme
}FILMES;
int main(){
int x = 5; //também pode ser lido com o scanf
FILMES filme[x];
funcao(filme, x);
for(int i = 0; i < x; i++)
{
printf("nome: %s\nano: %d\nnota: %.2lf", filme[i].nome, filme[i].ano,
filme[i].nota);
}
return 0;
}
Note que com array, você pode continuar usando a referência (variavel.variavel), mesmo numa
função diferente.
João Pedro
Túlio Cerqueira
José Willamys
Gabriel Barbosa