Skip to content

Instantly share code, notes, and snippets.

@haskellcamargo
Last active August 29, 2015 14:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save haskellcamargo/8e68ae50da074ad2b84a to your computer and use it in GitHub Desktop.
Save haskellcamargo/8e68ae50da074ad2b84a to your computer and use it in GitHub Desktop.
Ajuda Programação e Computação
/**
*Bem, Luan, vamos analisar o seu código atual, certo?
*/
int main(int argc, char** argv) {
return 0;
char x;
printf("Digite um nome");
scanf("%c",&x);
}
if (x==gabriel) {
printf("Menino ");
else
("Menino normal");
}
// Difícil saber por ondem começarmos, não? Olhe na linha 6. Tu tá dando return 0.
// Tu tem que fazer isso? Tem, para que o compilador saiba que tudo ocorreu certo,
// mas se tu fizer como primeira declaração, ele vai simplesmente parar ali. Comece
// removendo essa declaração dali. Ali não é o lugar dela.
// Ok, mas os erros não acabam aqui. Tu tá dizendo que x, que vai receber o nome,
// vai ser char, um único caractere, mas ele não vai ser apenas um caractere, vai
// ser um conjunto de caracteres. Tu vai ter que dizer isso a ele com char*.
// Tem mais. Note que a sua condicional, com if, está fora da função principal (main).
// O compilador vai te gritar ferozmente quando ver isso, e com razão. Isso está fora
// de uma função.
// Ainda dentro da condicional, tu iniciou o else dentro do if, o que não é aceito. A sintaxe
// padrão é if (condicao) { declaracoes } else { declaracoes }, tu ignorou } else { e
// simplesmente optou por else.
// Tu diz else ("Menino normal"). Mas else o que, gente? Tu vai querer usar printf depois disso,
// tenho certeza.
// O nome Gabriel está escrito SEM ASPAS. `gabriel` é uma string, não uma variável, não
// tem valor armazenado nele. Tu quer saber se o nome recebido SE COMPARA AO VALOR "gabriel".
// Em scanf, tu não quer ler UM CARACTERE %c, tu quer ler UM CONJUNTO DE CARACTERES %s.
// Não use "==" para comparar strings. Use strcmp. "==" não vai funcionar para o que você
// quer assim.
// Tá, mas, Celão, mostre o código!
#include <stdio.h>
int main(int argc, char** argv) {
char x[30];
printf("Digite um nome:\n");
scanf("%s", x);
if (strcmp(x, "gabriel") == 0) {
printf("Menino\n");
} else {
printf("Menino normal\n");
}
return 0;
}
// Bem, mas por que comparamos o resultado de strcmp com 0?
// Simples! Se as strings forem iguais, o retorno da função é 0!
// No final, retornamos 0 para evitarmos comportamentos indefinidos pelo
// compilador.
// Mas por que [30] na declaração?
// Porque estamos alocando espaço na memória para recebermos uma palavra com até
// 30 caracteres!
// Espero ter sido útil!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment