Ir ao conteúdo

Erro em "if".


Felipe Leite

Posts recomendados

Postado

Bom eu estou fazendo um programa, apenas por estudo, e ocorreu um problema.

//Você é feliz?
#include <stdlib.h>
#include <stdio.h>
main ()
{
char nome,fala;
printf("Qual e o seu nome? ");
scanf("%s", &nome);
printf("%s voce e feliz? ", nome);
scanf("%s", &fala);
if(fala="sim" || fala="SIM")
printf(" %s, Continue fazendo o que voce esta fazendo! ", nome);
else
{
if(fala="nao" || fala="NAO" || fala="não" || fala="NÃO")
printf(" %s, voce quer ser feliz? ", nome);
scanf("%s", &fala);
if (fala="sim" || fala="SIM")
printf("Mude! ");
else
if (fala="nao" || fala="NAO" || fala="não" || fala="NÃO")
printf(" %s, Continue fazendo o que voce esta fazendo! ", nome);
}
getch();
}

Aparece um erro no if (a linha do if fica vermelha), e eu não achei o erro. Alguma ajuda?

Dá erro no primeiro if*

Postado

Já tento assim? Não use os caracteres especiais que dá problema por enquanto, e o usuário também não vai conseguir digitar "não" "'~´`^".


#include <stdio.h>
void main ()
{
char nome[50],fala;
printf("Qual e o seu nome? ");
scanf("%s", &nome);
printf("%s voce e feliz [S] para [Sim] e [N] para [Nao]? ", nome);
scanf("%s", &fala);
if ((fala == 's') || (fala == 'S'))
printf(" %s, Continue fazendo o que voce esta fazendo! ", nome);
else
{
if ((fala== 'n') || (fala =='N'))
printf(" %s, voce quer ser feliz? ", nome);
scanf("%s", &fala);
if ((fala== 's') || (fala =='S'))
printf("Mude! ");
else
if ((fala == 'n') || (fala == 'N'))
printf(" %s, Continue fazendo o que voce esta fazendo! ", nome);
}
system ("pause");
}
#include <stdlib.h>

Obs : Para usar palavras no IF com char é complicado, o certo seria você usar string para isso. Então por enquanto use apenas S e N para identificar entre SIM e NÃO.

Postado

Cara a variável 'fala' é do tipo char...

Você está tentando fazer uma comparação de char com string...

char aceita apenas um caracter:

char a = 'n';

use char[] ou char* para armazenar string.

Postado

É um erro simples de se corrigir, apenas dê um limite para as strings..

o certo é char teste[qntd_de_bytes_maxima];

nunca vi funcionar de outro jeito =/

Quanto a comparação, me parece outro erro simples de se corrigir... c não pode comparar strings por si só, portanto existe o header string.h que deve ser adicionada para executar operações, como cópia e comparação.. para comparação use stricmp ou strcmp (procure a diferença entre elas, não da pra eu falar agora =/)

edit: corrigi alguns erros de escrita :lol:

Postado
é um erro simples de se corrigir, apenas dê um limite para as strings..

o certo é char teste[qntd_de_bytes_maxima];

nunca vi funcionar de outro jeito =/

quanto a comparação, me parece um erro simples de se corrigir... c não pode comparar strings por si só, portanto existe o header string.h que deve ser adicionada para executar operações, como cópia e comparação.. para comparação use stricmp ou strcmp (procure a diferença entre elas, não da pra eu falar agora =/)

Ok, muito obrigado pela ajuda, vou tentar.

Postado

Fiz algumas mudanças no código, e coloquei várias dicas como comentários, espero que te ajude ^_^

//Você é feliz?
#include <stdlib.h>
#include <stdio.h>
main ()
{
char nome[10], fala[5], fala2[5]; //precisa declarar assim: nome[10] 10 será o numero de caracteres máx que a string pode ter
printf("Qual e o seu nome? ");
scanf("%s", &nome);
printf("%s voce e feliz? ", nome);
scanf("%s", &fala);
if (fala == 'sim' || fala == 'SIM') //espaços dos lados dos ==, nos ifs a gente sempre tem que usar dois sinais de igual, e a string deve estar entre ' ' não entre " "
printf("%s, Continue fazendo o que voce esta fazendo! ", nome);
else
if (fala == 'nao' || fala == 'NAO'){ // o programa não lê a palavra "não" por causa do acento
printf(" %s, voce quer ser feliz? ", nome);
scanf("%s", &fala2); //já que é uma pergunta diferente, vamos usar uma variavel diferente
if (fala2 == 'sim' || fala2 == 'SIM')
printf("Mude! ");
else
if (fala2 == 'nao' || fala2 == 'NAO')
printf(" %s, Continue fazendo o que voce esta fazendo! ", nome);
} // a funçao if tem mais de um comando dentro dela, então devemos abrir e fechar chaves
getchar();
getchar();
getchar();
}

Postado

E' exatamente o que o pessoal disse:

Em C, se voce declara um CHAR, você esta se referindo a apenas um caracter.

Em C, declara-se um vetor de CHARS (uma colecao de caracteres) para formar uma palavra. Portanto, analisando, uma string e' uma sequencia de caracteres.

char nome[TAM_QUE_VOCE_DESEJA];

char fala[TAM_QUE_VOCE_DESEJA];

Lembre-se que em C nada vem pronto, o programador tem liberdade pra fazer praticamente tudo, pois assume-se que ele sabe o que fazer.

Quando voce for pra uma linguagem mais recente, como Java ou semelhante, vera que voce pode simplesmente declarar String[] nome;

Mas, lembrar que o C nao e' o Java, então, faca igual ao Jack Estripador. Va por partes ;)

Ah, e mais uma coisa:

Se possivel, migre para o Visual Studio 2010 ou superior (preferencialmente o 2012), ou ate mesmo o Eclipse com Plug-in pra C.

O DevC++ deixa passar muita coisa, o que pode atrapalhar seu aprendizado.

Lembro que fiz um projeto em C, eu trabalhava no Visual 2012 e um amigo no DeVC++. Todas as validacoes de nome, telefone, e-mail, etc. funcionavam perfeitamente no compilador dele. Quando passadas para o Visual Studio, muito lixo de memoria era impresso, o que implicava que o trabalho tinha de ser refeito, devido a baixa tolerancia de compiladores como DeV ou CodeBlocks.

Boa sorte

Postado

Testei o código posto e aqui não funcionou =/

caso aí também não funcione, no lugar do if(fala=="SIM"), tente if(stricmp(fala, "sim")==0), isso, com o <string.h> irá comparar caractere a caractere, em caso de ser a mesma string ira retornar 0, se for diferente a diferença entre as letras irá ser retornada...

E apenas um acréscimo ao que foi dito pelo Rivins, pelo que me lembro sobre strings em C, só é contado como string se terminar com '\0' (caractere finalizador/nulo), portanto o vetor deve ter o tamanho que você quer, mais um (para "teste", C irá ver como "teste\0")

Postado
Testei o código posto e aqui não funcionou =/

caso aí também não funcione, no lugar do if(fala=="SIM"), tente if(stricmp(fala, "sim")==0), isso, com o <string.h> irá comparar caractere a caractere, em caso de ser a mesma string ira retornar 0, se for diferente a diferença entre as letras irá ser retornada...

E apenas um acréscimo ao que foi dito pelo Rivins, pelo que me lembro sobre strings em C, só é contado como string se terminar com '\0' (caractere finalizador/nulo), portanto o vetor deve ter o tamanho que você quer, mais um (para "teste", C irá ver como "teste\0")

Exatamente!

Alias, havia me esquecido. Seria bom que ele optasse por usar gets ao invés de scanf, pois o gets ja posiciona o \0 automaticamente ao fim do Vetor, autenticando então, uma String. Enquanto o scanf apenas le a quantidade exata de caracteres que foram declarados no vetor. Se forem digitados mais ou menos caracteres do que o declarado, lixo de memoria sera acumulado e as strings jamais sera identicas

Valeu por lembrar, Anonimo1w

Arquivado

Este tópico foi arquivado e está fechado para 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!