Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
entortov

Erro Programa em C

Recommended Posts

Ola pessoal, estou com um problema quanto a variavel cont, seu valor de inicialização parece estar corrompido, segue o codigo:

#include<stdio.h>

#include<stdlib.h>

#define MAX 5

main(){

int cont,i;

char x[3],*ope[MAX]={"Telefonou para a vitima?","Esteve no local do crime?","Mora perto da vitima?","Devia para a vitima?","Ja trabalhou com a vitima?"};

for (i=0;i<5;i++){

printf("%s ",ope);

scanf("%s", &x);

if(x=="sim" || x=="s"){

cont++;}

}

printf("%d", cont);

printf("\n\n");

system("pause");

}

Obs. ja tentei inicializala cont=0, mais seu valor n sai do 0.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim

#include<stdio.h>
#include<stdlib.h>
#define MAX 5
main(){
int cont =0 ,i;
char x[3],
*ope[MAX]={"Telefonou para a vitima?","Esteve no local do crime?","Mora perto da vitima?","Devia para a vitima?","Ja trabalhou com a vitima?"};

for (i=0;i<5;i++)
{
printf("%s ",ope[i]);
scanf("%s", &x);
if(x[0]=='s'){
cont++;}
}
printf("%d", cont);
printf("\n\n");
system("pause");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

 (x=="sim" || x=="s") 

Não é assim que se compara strings.

Tem que comparar caractere por caractere.

Ou usar alguma função da string.h, como a strcmp, que devolve 0 caso as strings sejam iguais.

Não use o operador & pra pegar string dentro da scanf, é sem ele mesmo.

Use gets(string);

 
gets(x);
(strcmp(x,"sim")==0 || x[0]=="S")

Compartilhar este post


Link para o post
Compartilhar em outros sites

(strcmp(x,"sim")==0 || x[0]=="S")

não seria x[0]== 'S' whitedog? Mas eu faria como ele explicou

Como C é CaseSensitive para não perder a comparação da string eu usaria toupper() do arquivo de cabeçalho ctype.h para converter todas as letras em maiusculas e depois comparar ou tolower(). Por exemplo vai que um usuario digite "SIm", "SIM", "sIM", etc, isso provocaria um erro no programa por que"SIM" não é "sim" e 's' não é 'S'.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX 5
int main(){
int cont=0 ,i ,j;
char x[3],
*ope[MAX]={"Telefonou para a vitima?","Esteve no local do crime?","Mora perto da vitima?","Devia para a vitima?","Ja trabalhou com a vitima?"};

for (i=0;i<5;i++)
{
printf("%s ",ope[i]);
gets(x);
for(j= strlen(x)-1; j>=0; j--)// Para usar a função strlen incluir string.h
x[j] = toupper(x[j]); //Se o usuario usar caps lock ou não as letras vão ser maiusculas
if(strcmp(x,"SIM")==0 || x[0]=='S'){cont++; }
}
printf("%d", cont);
printf("\n\n");
system("pause");
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

isso, 'S'...

mas se x é "SIM", então x[0]='S' sempre.

Alem do mais, se digitarem Sex , seria como um sim.

Lembrei de outra coisa: stricmp

Ela compara com ignore case, ou seja, pode receber sim, SIm, sIm, SiM...


if(stricmp(x,"sim")==0 || (toupper(x[0])=='s' && x[1]=='\0'))
cont++;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×