Sign in to follow this  
sl@ckw@re

Condição Lógica

Recommended Posts

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

int main()
{
      char nome[100];
      char sobrenome[100];
      printf("Digite seu nome:\n");
      scanf("%s", nome);
      printf("Digite seu sobrenome:\n");
      scanf("%s", sobrenome);
      printf("Seu nome é: %s %s\n", nome, sobrenome);

if (nome=='joao' & sobrenome=='santos')
printf("Você é o cara!\n",nome,sobrenome);
else
printf("Você não é o cara\n");

}

Observação:

O programa compila e é executado,porém a frase:("Você é o cara!")nunca é executada.

Share this post


Link to post
Share on other sites

Você cometeu dois erros. Um sintático e o outro conceitual. Em C, uma string deve ser sempre representada entre aspas duplas (") e não aspas simples ('). Isso é um erro que o compilador deveria ter te avisado. (veja o manual do seu compilador e ative as flags que mostram os Warnings e forçam o padrão ANSI).

O outro erro é conceitual. Onde você está comparando as strings, na verdade o que você está fazendo com aquilo é comparar se a posição de memória onde estão as strings são iguais, o que nunca será verdade. Para comparar o valor das strings, use a função strcmp(), da string.h. Essa função devolve 0 se as duas strings forem iguais, > 0 se a primeira for maior que a segunda e < 0 se a primeira for menor que a segunda.

SINTAXE: int strcmp(const char *a, const char *b );

Então seu if fica mais ou menos assim:

if (strcmp(nome, "joao") && strcmp(sobrenome, "santos")){
          printf("Voce é o cara!!!\n");
}
Se você quiser imprimir o nome e o sobrenome também, sua chamada ao printf deve ser feita da seguinte forma:
printf("Voce é o cara, %s %s\n", nome, sobrenome);

E um aviso: No seu if você usou o operador bitwise & no lugar do operador booleano &&. O bitwise & tem comportamento diferente do &&. O bitwise verificará bit por bit do valor devolvido pelas funcoes e se em alguma posição os bits dos dois valores forem 1, ele marcará um naquela posição. Caso contrário marcará 0. Ex:

00100111 & (verdadeiro)

11010010 resulta em (verdadeiro)

00000010 (verdadeiro)

mas se for nesse exemplo:

10101010 & (verdadeiro)

01010101 resulta em (verdadeiro)

00000000 (falso)

Portanto, use o operador && nesse caso, pois dessa forma ele trata os valores como booleanos (verdadeiro e falso) e não como sequencias de bits.

Share this post


Link to post
Share on other sites

Tentei fazer o que você solicitou,mais ainda não foi,veja:

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

int strcmp(const char *a, const char *b )

{
      char nome[100];
      char sobrenome[100];
      printf("Digite seu nome:\n");
      scanf("%s", nome);
      printf("Digite seu sobrenome:\n");
      scanf("%s", sobrenome);
      printf("Seu nome é: %s %s\n", nome, sobrenome);


if (strcmp(nome,"joao") && strcmp(sobrenome,"santos"))
{
printf("Voce é o cara!!!\n");
else
printf("Você não é o cara\n");


}

Tenha paciência comigo,e que eu ainda sou iniciante.

Share this post


Link to post
Share on other sites

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

int strcmp(const char *a, const char *b )

{
      char nome[100];
      char sobrenome[100];
      printf("Digite seu nome:\n");
      scanf("%s", nome);
      printf("Digite seu sobrenome:\n");
      scanf("%s", sobrenome);
      printf("Seu nome é: %s %s\n", nome, sobrenome);


if (strcmp(nome,"joao") && strcmp(sobrenome,"santos"))
{
printf("Voce é o cara!!!\n");
else
printf("Você não é o cara\n");


}
cade a funcão main? de onde voce tirou isso: int strcmp(const char *a, const char *b )? bom, olha só o porque ele não entra no if se o nome e o sobrenome for o que voce está procurando:
int main(){
   char nome[30] = "Kleber";
   char snome[30] = "Andrade";
   if (!strcmp(nome, "Kleber") && !strcmp(snome, "Andrade")){
          printf("Voce é o cara!!!\n");
   }
   else
      printf("Voce não é o cara!!!\n");
}

observe o uso do operador lógico '!'

como o Jonas disse:

Para comparar o valor das strings, use a função strcmp(), da string.h. Essa função devolve 0 se as duas strings forem iguais

então, se as strings forem iguais o retorno é zero e o if é executado.

voce pode colcoar apenas um operador '!', basta limitar corretamente com parenteses.

:lol:

Share this post


Link to post
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
Reply to this topic...

×   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.

Sign in to follow this