danfla3 Postado Março 18, 2016 Denunciar Share Postado Março 18, 2016 Olá a todos, Meu curso de programação da faculdade só comeca semestre mas como me interesso no assunto já estou me aventurando um pouco agora, mas não tenho muito conhecimento. Gosteria de saber o que há de errado nesse codigo que escrevo: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char** argv) { char elemento1[20]; printf("Digite um elemento: "); scanf("%s", &elemento1[20]); if(elemento1[20] == 'Hidrogenio'){ printf("\n\nA sigla desse elemento é: H \n"); } return 0; } Recebo a seguinte mensagem de erro: "character constant too long for its type" Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Felipe222 Postado Março 18, 2016 Denunciar Share Postado Março 18, 2016 Olá! Sou iniciante em C, mas acho que posso dar uma força . . . Nesta linha scanf ( "%s", &elemento1 [ 20 ] ); por se tratar de uma string você só precisa colocar o nome da variável que você deseja acessar, o código de formatação “%s” já diz ao compilador C que você vai acessar uma variável do tipo string. Além do mais por se tratar de uma string, não é necessário o uso do “ & ” na frente da variável, pois, por se tratar de um vetor de caracteres, o primeiro elemento do vetor é uma referencia ao restante dos elementos do vetor neste caso da string, é como se você dissesse onde começa o inicio de uma fila, ou neste caso da string. E também ocorreu de você colocar o [ 20 ] depois da variável elemento1, neste caso isso não é necessário, retire o [ 20 ] do código: mude disso: scanf ( "%s", &elemento1 [ 20 ] ); para isso: scanf ( "%s", elemento1 ); Não tenho certeza, mas muito provavelmente este é o mais provavel causador da mensagem de erro! Sem contar que na linguagem c, você não pode fazer a comparação direta entre variáveis do tipo string, sendo assim a linha seguinte não vai funcionar, além de que não é necessário colocar o [ 20 ]: if ( elemento1 [ 20 ] == 'Hidrogenio' ) Sendo assim, para você realizar a comparação entre duas strings, você vai precisar utilizar uma função que realize tal tarefa, dê uma olhada neste tópico que já respondi e que fala exatamente isso: https://www.scriptbrasil.com.br/forum/topic/182241-d%C3%BAvida-sobre-c/#comment-686135 Outro detalhe, na linguagem c, as aspas simples normalmente são utilizadas para a representação de caracteres simples ‘a’, ‘b’, ‘^’, sendo assim elas só devem ser usadas para valores de variáveis do tipo char: ex: char letra; letra = ‘A’; sendo que para variáveis do tipo string utiliza-se aspas duplas: ex: char nome [ 6 ]; nome = “marcos”; Obs.: quando voce tem uma cadeia de caracteres ( string ) voce só utiliza o colchetes com um valor dentro dele [ 20 ] para representar a posicao do vetor em que voce quer ler ou alterar um valor especifico, sendo que em c a posicao começa em 0. Dê uma olha neste outro tópico de outro forum em que eu chego a explicar como voce poderia utilizar o if de outra maneira: http://forum.clubedohardware.com.br/topic/1146973-ajuda-com-char/#comment-6306515 Bom por hora é só . . . veja se as dicas acima lhe ajudam . . . Ubuntu 14.04 GCC 4.8 CodeBlocks 13.12 Espero Ter Ajudado ! ! ! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 danfla3 Postado Março 28, 2016 Autor Denunciar Share Postado Março 28, 2016 Em 18/03/2016 at 00:58, Felipe222 disse: Olá! Sou iniciante em C, mas acho que posso dar uma força . . . Nesta linha scanf ( "%s", &elemento1 [ 20 ] ); por se tratar de uma string você só precisa colocar o nome da variável que você deseja acessar, o código de formatação “%s” já diz ao compilador C que você vai acessar uma variável do tipo string. Além do mais por se tratar de uma string, não é necessário o uso do “ & ” na frente da variável, pois, por se tratar de um vetor de caracteres, o primeiro elemento do vetor é uma referencia ao restante dos elementos do vetor neste caso da string, é como se você dissesse onde começa o inicio de uma fila, ou neste caso da string. E também ocorreu de você colocar o [ 20 ] depois da variável elemento1, neste caso isso não é necessário, retire o [ 20 ] do código: mude disso: scanf ( "%s", &elemento1 [ 20 ] ); para isso: scanf ( "%s", elemento1 ); Não tenho certeza, mas muito provavelmente este é o mais provavel causador da mensagem de erro! Sem contar que na linguagem c, você não pode fazer a comparação direta entre variáveis do tipo string, sendo assim a linha seguinte não vai funcionar, além de que não é necessário colocar o [ 20 ]: if ( elemento1 [ 20 ] == 'Hidrogenio' ) Sendo assim, para você realizar a comparação entre duas strings, você vai precisar utilizar uma função que realize tal tarefa, dê uma olhada neste tópico que já respondi e que fala exatamente isso: https://www.scriptbrasil.com.br/forum/topic/182241-d%C3%BAvida-sobre-c/#comment-686135 Outro detalhe, na linguagem c, as aspas simples normalmente são utilizadas para a representação de caracteres simples ‘a’, ‘b’, ‘^’, sendo assim elas só devem ser usadas para valores de variáveis do tipo char: ex: char letra; letra = ‘A’; sendo que para variáveis do tipo string utiliza-se aspas duplas: ex: char nome [ 6 ]; nome = “marcos”; Obs.: quando voce tem uma cadeia de caracteres ( string ) voce só utiliza o colchetes com um valor dentro dele [ 20 ] para representar a posicao do vetor em que voce quer ler ou alterar um valor especifico, sendo que em c a posicao começa em 0. Dê uma olha neste outro tópico de outro forum em que eu chego a explicar como voce poderia utilizar o if de outra maneira: http://forum.clubedohardware.com.br/topic/1146973-ajuda-com-char/#comment-6306515 Bom por hora é só . . . veja se as dicas acima lhe ajudam . . . Ubuntu 14.04 GCC 4.8 CodeBlocks 13.12 Espero Ter Ajudado ! ! ! Muito Obrigado pela ajuda. Mas já descobri, pelo jeito nesse caso você deve comparar duas strings usando strcmp Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
danfla3
Olá a todos,
Meu curso de programação da faculdade só comeca semestre mas como me interesso no assunto já estou me aventurando um pouco agora, mas não tenho muito conhecimento.
Gosteria de saber o que há de errado nesse codigo que escrevo:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char** argv) {
char elemento1[20];
printf("Digite um elemento: ");
scanf("%s", &elemento1[20]);
if(elemento1[20] == 'Hidrogenio'){
printf("\n\nA sigla desse elemento é: H \n");
}
return 0;
}
Recebo a seguinte mensagem de erro: "character constant too long for its type"
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.