Mateus Fontanini Postado Junho 6, 2012 Denunciar Share Postado Junho 6, 2012 O código é esse:#include <iostream>#include <string.h>#include <stdio.h>#define tam 3using namespace std;struct habitantes{ char sexo[2]; int altura; int idade; char olhos[2];};int main(){ int i,media; media = 0; habitantes vet[tam]; for (i=0; i<tam; i++) { cout << " Digite o sexo :"; gets (vet.sexo); cout <<"\n"; cout << "Digite a altura"; cin >> vet.altura; fflush(stdin); cout << "Digite a idade"; cin >> vet.idade; fflush(stdin); cout << "Digite os olhos:"; gets(vet.olhos); cout << vet.olhos; if (vet.olhos=='c') { cout << vet.idade; cout << "entrei"; media = media + vet.idade; } } cout << media; cout << "Hello world!" << endl; return 0;}Tá dando o seguinte erro: ISO C++ forbids comparison between pointerSe eu colo =="c", funciona, mas nunca entra no for! alguém pode me ajudar? Obrigado!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 roccoC/C++ Postado Junho 6, 2012 Denunciar Share Postado Junho 6, 2012 Ola, você diz que não entra no for, más como não entra no for se o for faz repetiro código três vêzes?Aliás este código até funciona sem o for veja: #include <iostream> #include <string.h> #include <stdio.h> #include <conio2.h> #define tam 1 using namespace std; struct habitantes { char sexo[2]; int altura; int idade; char olhos[2]; }; int main() { int i,media; media = 0; habitantes vet[tam]; //for (i=0; i<tam; i++) //{ cout << " Digite o sexo :"; gets (vet[i].sexo); cout <<"\n"; cout << "Digite a altura"; cin >> vet[i].altura; fflush(stdin); cout << "Digite a idade"; cin >> vet[i].idade; fflush(stdin); cout << "Digite os olhos:"; gets(vet[i].olhos); cout << vet[i].olhos; if (vet[i].olhos=="c") { cout << vet[i].idade; cout << "entrei"; media = media + vet[i].idade; } //} cout << media; cout << "Hello world!" << endl; getche(); }ou se não entendi me desculpe tah certo? Abraços... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ezequiel A. Ribeiro Postado Junho 15, 2012 Denunciar Share Postado Junho 15, 2012 (editado) Quando você cria um "char olhos[2]"você está criando um vetor de 3 posições, ou seja 0 , 1 e 2. Nunca esqueça do zero.se você fizer isso olhos = "abc" terá um erro pois no final de toda string é coloca um sinal de fim da mesma, então o que se vê "abc" na verdade é "abc/0" o vetor para conter nossa string "abc" tem que ser de 4 espaços e não 3, nunca esqueça desse sinal de fim de string quando for criar um vetor de string. O nosso vetor de 2 só cabe "ab" pois a posição 2 receberá o sinal de fim de string.olhos[3]= {'a','b','c'} é o mesmo que olhos[3] = "abc" na hora que você faz um "gets(vet.olhos)" e coloca a letra c por exemplo essa letra irá para posição 0.então para que você a localize terá que fazer o if assim : if (vet.olhos[0]=='c')o C não reclama se você fizer isso if (vet.olhos=="c"), porque "c" significa um conjunto de string, ou uma palavra, será feita uma comparação com todos os campos do vetor olhos[2], enquanto que (vet.olhos=='c') você está querendo localizar um campo especifico que contenha uma letra. Como você não especificou esse campo como em vet.olhos[0]=='c' ele dará erro.Da mesmo forma terá um erro se fizer vet.olhos[0]=="c", pois você quer localizar uma palavra inteira em uma posição apenas, que suporta apenas uma letra.O correto então seria vet.olhos=="c" , sem especificar uma posição."forbids comparison between pointer" preste atenção na mensagem de erro, está falando que há um erro em se fazer comparação entre ponteiros, isso porque todo char na verdade é um vetor de ponteiros que apontam para caractere. Editado Junho 15, 2012 por Ezequiel A. Ribeiro Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mateus Fontanini Postado Junho 17, 2012 Autor Denunciar Share Postado Junho 17, 2012 aHHH entendi gente!Obrigado! Deu certo agora! :) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Mateus Fontanini
O código é esse:
#include <iostream>
#include <string.h>
#include <stdio.h>
#define tam 3
using namespace std;
struct habitantes
{
char sexo[2];
int altura;
int idade;
char olhos[2];
};
int main()
{
int i,media;
media = 0;
habitantes vet[tam];
for (i=0; i<tam; i++)
{
cout << " Digite o sexo :";
gets (vet.sexo);
cout <<"\n";
cout << "Digite a altura";
cin >> vet.altura;
fflush(stdin);
cout << "Digite a idade";
cin >> vet.idade;
fflush(stdin);
cout << "Digite os olhos:";
gets(vet.olhos);
cout << vet.olhos;
if (vet.olhos=='c')
{
cout << vet.idade;
cout << "entrei";
media = media + vet.idade;
}
}
cout << media;
cout << "Hello world!" << endl;
return 0;
}
Tá dando o seguinte erro: ISO C++ forbids comparison between pointer
Se eu colo =="c", funciona, mas nunca entra no for! alguém pode me ajudar? Obrigado!!
Link para o comentário
Compartilhar em outros sites
3 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.