Ir ao conteúdo
  • Cadastre-se

Ajuda com Char.


MattHardy

Posts recomendados

Toda vez que executo e insiro "r" ou outra letra citada no código não define o "valor" para 10.

Alguém poderia me ajudar?

 

#include <stdio.h>
#include <stdlib.h>


int main () {
	char carta[3];
	int valor = 0;

	puts ("Entre o nome da carta:");
	scanf("%2s", carta);



	if (carta == "r"){
		valor = 10;
	}
	else if (carta == "d"){
		valor = 10;
	}

	else if (carta == "v"){
		valor = 10;
	}


printf ("\n %i",valor);

return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Olá!

 

 

Sou iniciante em C, mas acho que posso lhe ajudar . . .

 

 

 

Ate onde sei o tipo char pode ser usado de duas maneiras:

 

 

 

- Na representação de um único caractere

 

char carta;

 

você está declarando uma variável de nome carta que irá receber um único caractere

 

 

 

 - Na representação de uma cadeia de caracteres ( string )

 

char carta [ 3 ]; 

 

Você está declarando uma variável de nome carta que irá receber uma cadeia de caracteres ( string ), onde uma string pode ser uma única palavra ou mesmo uma frase e ate mesmo um texto inteiro, necessitando para isso que o tamanho seja grande o bastante para armazenar todos os caracteres, quanto maior a string maior vai ser o valor de dentro de char nome [ . . . ];

 

 

 

- nesta parte do código não sei para que serve a o código de formatação “ %2s ”, mas a não ser que ele sirva para ler apenas o primeiro caractere, será completamente inútil se você quer ler apenas um único caractere.

 

scanf("%2s", carta);

 

onde o código correto para ler um único caractere seria:

 

scanf ( "%c", &carta );

 

 

- aqui acho que você cometeu um equivoco:

 

if ( carta == "r")
  {     
     valor = 10;
  }

 

Quando você quer atribuir ou especificar a leitrua ou comparação de um valor do tipo “ char ”, existe diferença entre usar aspas simples e aspas duplas:

 

- As aspas simples são usadas para a trabalharem em conjunto com caracteres únicos ( 1 ) char nome;

 

sendo assim dentro do if você pode fazer a comparação direta entre o valor de uma variável do tipo char nome; e um valor qualquer desejado, sendo para isso necessário que o valor seja um único caractere e que o mesmo esteja entre aspas simples:

 

if ( carta == 'r')
  {     
     valor = 10;
  }

 

- As aspas duplas são usadas para a representação de strings char nome [ 3 ];

 

Sendo assim, a instrução abaixo ate pode funcionar, mas dependendo do caso poderia causar erros de tempo de execução que são muito difíceis de serem detectados:

 

if ( carta == "r" )
  { 
     valor = 10;
  }

 

e que poderia retornar a(s) seguinte(s) mensagem(ns) de alerta dependendo do seu Compilador e da sua IDE, só não vou explicar isso agora por falta de tempo:

 

 

|14|warning: comparison between pointer and integer [enabled by default]|

 

|14|warning: comparison with string literal results in unspecified behavior [-Waddress]|

 

 

Sendo assim o que o usuário Math.PI disse é apropriado caso no futuro você queira fazer a comparação de uma string especifica com o valor de outra string armazenada na variável alvo.

 

- Além disso a atribuição de valores dentro dos seus IFs todas resultam em 10, quando o correto seria que cada IFs atribua um valor diferente, claro que isso vai depender do que o código deve fazer.

 

- Na instrução:

printf ( "\n %i", valor );

não sei detalhes sobre todos os usos de todos os códigos de formatação capazes de serem utilizadas em conjunto com printf(), mas para o tipo int o mais apropriado seria utilizar o código %d

 

Bom por hora é só . .  veja se as dicas lhe ajudam . . .

 

 

Ubuntu 14.04  GCC 4.8  CodeBlocks 13.12

 

 

Espero Ter Ajudado ! ! !

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Apenas uma correção:

 

 

Realmente o código de formatação ” %2s “ parece limitar o numero máximo de caracteres que a função scanf() pode ler da string, ou seja,

 

char nome [ 6 ];

scanf ( "%6s", nome );
  
entrada: alexandre
  

print ( "%s", nome );

saida: alexan

 

No código acima apenas os 6 primeiras letras do nome serão exibidas na tela, porque o o código de formatação força a função scanf(); parar de ler tudo o que vier depois do numero especificado de caracteres a serem lidos.

 

Caso contrario, o programa poderia apresentar problemas ao chegar nesta parte, caso a quantidade de caracteres passados seja maior do que a capacidade de armazenamento da variável.

 

E como aconteceu aqui quando testei, o Compilador e a IDE podem não apresentar qualquer mensagem de Alerta ou Erro, ficando assim a supressa no momento de execução do programa.

 

 

Eu quase deixei esse detalhe passar . . . :P

 

 

Obs.: mas o que eu e o Math.Pi lhe dissemos, ainda conta . . . é sempre bom definir bem como a(s) sua(s) variáveis vão funcionar . . . ^_^

 

 

Pois, caso você queria testar com a dica do Math.Pi, da forma como está o seu código, tecnicamente ele está correto, apenas dentro dos IFs é que você vai ter de colocar uma função para fazer a comparação entre strings.

 

Caso você queira fazer do jeito que lhe expliquei, você pode fazer a comparação de forma direta, bastando para isso seguir as dicas que já lhe disse no post anterior . . .

 

 

Ate a Próxima ! ! !

 

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...