Jump to content
Fórum Script Brasil
  • 0

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


danfla3
 Share

Question

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 to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...