Ir para conteúdo
Fórum Script Brasil
  • 0

O que há de errado nesse codigo? (ler string e comando if)


danfla3

Pergunta

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

  • 0

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 ! ! !

Link para o comentário
Compartilhar em outros sites

  • 0
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

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...