Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Hudson M. Cerri

incompatible types when assigning to 'char[30]' from type &#3

Recommended Posts

Galera, me ajudem?

 

 

#include <stdio.h>
int main() {

int voto;
char votado[30],sn;
 
printf("Digite seu voto\n");
scanf("%d",&voto);

switch(voto) {
case(13):
printf("Voto para %s\n",votado);
votado="Dilma Houssef";
break;

case(45):
votado="Jose Serra";
printf("Voto para %s\n",votado);
break;

case(43):
votado="Marina Silva";
printf("Voto para %s\n",votado);
break;

case(50):
votado="Plinio de Arruda";
printf("Voto para %s\n",votado);
break;

case(27):
votado="Eymael";
printf("Voto para %s\n",votado);
break;

default:
printf("Voto invalido\n");

}
printf("Confirma voto em %s (%d)? s/n\n",votado,voto);
scanf("%c",&sn);

if(sn="s"){
printf("Voto Computado!");
}
else{
printf("Voto nao Confirmado.");
}
return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claro, ajudamos sim. Mas qual a dúvida mesmo?

Compartilhar este post


Link para o post
Compartilhar em outros sites
votado = "Dilma Houssef";

Isso está errado, não?! Quando vai atribuir uma string não é preciso passar CADA elemento um por um?

Tem funções para isso, tente usar a strcpy(). Veja se isso resolve:

switch(voto)

{

case(13):
strcpy(votado, "Dilma Houssef");
printf("Voto para %s\n",votado);
break;

case(45):
strcpy(votado, "Jose Serra");
printf("Voto para %s\n",votado);

break;

case(43):
strcpy(votado, "Marina Silva");
printf("Voto para %s\n",votado);

break;

case(50):
strcpy(votado, "Plinio de Arruda");
printf("Voto para %s\n",votado);

break;

case(27):
strcpy(votado, "Eymael");
printf("Voto para %s\n",votado);

break;

default:

printf("Voto invalido\n");

}

ou

#include <string>
#include <iostream>
using namespace std;

string candidato (int voto);


main(void){
	
	cout << "SEU VOTO: " << endl;
	int voto; cin >> voto;
	cout << "Confirmar voto para " << candidato(voto) << " ? S/N" << endl;
	char sn; cin >> sn;
	
	if((sn =='s') || (sn == 'S'))
		cout << "Voto computado" << endl;
	else
		cout << "Voto nao confirmado" << endl;
	
}


string candidato (int voto){
	
	string nome;
	
	switch(voto){
		
		case 13: nome = "Dilma Houssef"; 	break;
		case 45: nome = "Jose Serra";		break;
		case 43: nome = "Marina Silva";		break;
		case 50: nome = "Plinio de Arruda";	break;
		case 27: nome = "Eymael";			break;		
	}
	
	return nome;
}
Desculpa qualquer coisa aí, sou iniciante.

Compartilhar este post


Link para o post
Compartilhar em outros sites


#include <stdio.h>

 

int main (int argc, char** argv)

{

const char* const nomes[] = { "Dilma Houssef", "Eymael", "Marina Silva",

"José Serra", "Plinio de Arruda", "Voto " \

"invalido" };

const char* s;

int voto;

char sn;

 

puts("Digite seu voto:");

scanf("%d%*c", &voto);

 

s =

({

int r;

 

switch(voto)

{

case 13: r = 0; break;

case 27: r = 1; break;

case 43: r = 2; break;

case 45: r = 3; break;

case 50: r = 4; break;

default: r = 5;

}

nomes[r];

});

 

printf("Candidato: %s.\nConfirmar [S/n]:\n", s);

scanf("%c%*c", &sn);

 

if((sn == 'S') || (sn == 's'))

puts("Voto comfirmado.");

else

puts("Voto não confirmado, vote novamente.");

return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então o que você quer é a resolução do exercício?

 

Com a resposta do Mateus GP:

 

 

votado = "Dilma Houssef";

Isso está errado, não?! Quando vai atribuir uma string não é preciso passar CADA elemento um por um?

Tem funções para isso, tente usar a strcpy().

 

Já resolve o seu problema de compilação. Estamos aqui com disposição para ajudar.

Abrir um post e jogar um código dentro, esperando uma solução. Não ajuda em nada...

 

Boa sorte com o projeto.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Talvez abrir um post e jogar códigos ajude em algo. Eu mesmo, no início, sempre entendia melhor quando via a solução de um exercício, talvez por isso realizo o desejo, pelo menos subliminar, de todos que me pedem ajuda, mesmo que não especificamente a mim.


Quem realmente quer aprender não apenas copia o que já está pronto, mas se baseia. Se não fosse benéfico a resolução de exercícios, porque existe isto em quase todos os livros. É claro que não é bom resolver tudo, disso sei.


Talvez me engano julgando o que os outros querem por aquilo que quero ou fazendo o que quero que façam por mim.


Sem mais filosofia, me perdoem a perda de foco ou qualquer mal-estar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Peço desculpas GBecker, entrei no fórum buscando uma solução pro meu problema, admito que consegui e agradeço aos que me ajudaram, e vc nao está na lista. Porem mais do que isso, consegui engolir reclamaçao de quem nao pretendia ajudar, mas apenas buscar discussoes por coisas fúteis, pois, quem quis ajudar ajudou,, nao ficou se fazendo de desentendido, pq eu sei que vc entendeu o que eu estava querendo, por fim, garanto que se for pra ser dessa maneira, agradeço de coração aos q me ajudaram, mas nao preciso ficar ouvindo isso e por isso, nao culpo o forum, pelo contrario, mas nao fare mais parte, me desculme o incomodo GBecker e obrigado por tudo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mateus GP, será que poderia me explicar o que o código abaixo faz? Eu não entendi a parte do "s = ({...});" e gostaria de entender...

s = 
({
int r;
 
switch(voto)
{
case 13: r = 0; break;
case 27: r = 1; break;
case 43: r = 2; break;
case 45: r = 3; break;
case 50: r = 4; break;
default: r = 5;
}
nomes[r];
});

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites
Explicarei de uma forma mais pratica, em primeiro lugar o parêntese indica que seu conteúdo deverá ser resolvido primeiramente, dentro deste parêntese existe um bloco de instruções, onde o ultimo elemento será retornado, neste caso nomes[r]. Isto funciona como uma função inline, em que não é necessário um return.


Está explicação não contém termos técnicos da linguagem, para mais informações e credibilidade pesquise em alguns livros e/ou apostilas.


Se alguém possuir o conhecimento necessário e tempo (tempo uma coisa que é escassa para mim), explique mais detalhadamente para os demais.


Espero ter elucidado sua duvida, sem mais desejo boa sorte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estas expressões se chamam statement expressions. São uma extensão da GNU, portanto não fazem parte da linguagem.

 

http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html

 

Hudson:

O questionamento do GBecker é válido. Todos são bem-vindos a procurar ajuda aqui, mas desencorajamos completamente qualquer tipo de "preguiça" por parte dos usuários. De forma geral, é mal costume jogar seu código e dizer: "consertem". Não leve para o pessoal, e entenda isso como uma forma de agregar valor aos seus posts (e às respostas que você vai receber, que, te garanto, serão sempre melhores).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok guidjos. Obrigado pelo esclarecimento. Foi pq meu problema foi a mensagem no terminal:" incompatible types when assigning to 'char[30]' from type ", enviei meu codigo só para complementar a pergunta, eu so queria entender o porque do erro e não uma depuração no meu codigo. Mas nao vai mais se repetir, peço desculpas pelo meu comportamento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é um problema sério fazer isso das primeiras vezes em que posta, então tá tranquilo.

 

Quanto ao erro, ele diz que o tipo (char[30]) é incompatível com o tipo (static char (*)[n]), sendo n o número de bytes de cada string literal que você usou para representar os nomes dos candidatos.

 

Na verdade, o uso de arrays do lado esquerdo de = é, em si, um erro. Como já foi dito acima, é preciso copiar elemento a elemento. No caso de arrays de caracteres, existem funções na biblioteca padrão que tratam disso (strcpy, strncpy, strcat, ...).

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em primeiro lugar agradeço Guidjos, por ter explicado aos demais.
Hudson na verdade foi bom você não especificar os erros, pois são mais que imaginava. Creio que foi a pressa que me cegou.
Erros:
Linha 12: a variavel votado não foi inicializada, inverta as linhas 12 e 13;
Linha 43: Aspas duplas são para strings, use apóstrofo para caracteres.
incompatible types when assigning to 'char[30]' from type, Uma possivel solução seria:
#define _(t)    ((const char*)t)
//...
const char* votado;
//...
votado = _("Nome");

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.