strcmp devolve valor errado

Iniciado por marciovos, 26 de Março de 2010, 15:23

tópico anterior - próximo tópico

marciovos

galera to com um tremendo problema,
estou usando linguagem C para fazer um shell
mas a minha duvida mesmo é simples(eu acho)

estou usando o comando strcmp para comparar strings certo?
tipo
strcmp (ope,"limpa"))

sei que se as strings  forem iguais ele devolve 0,
mas ele nao esta voltando 0 de forma alguma
volta 1 e -1 e ainda por cima se eu digitar "caixa" ele volta 1 se eu digitar "limpa" ele também volta 1

codigo a serguir

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 10

int main()
{
char ope[MAX];
int exit=1;
do
{

fgets(ope,MAX,stdin);
printf("strcmp(ope,limpa)=%d\n",strcmp (ope,"limpa"));
printf("strcmp(ope,'sair')=%d\n",strcmp (ope,"sair"));

}while(exit!=0);
}


resultado execuçao

limpa
strcmp(ope,limpa)=1
strcmp(ope,'sair')=-1
caixa
strcmp(ope,limpa)=1
strcmp(ope,'sair')=-1


intaum nao sei oq eh
acho que pode ser o compilador mas nao tenho certeza
Márcio Vinícius O. Sena - Goiânia/GO - Ubuntu 9.10 & W7- HP Pavilion dv4. 4gb. ATI 256mb. 300gb.

jeflui

#1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 10

int main()
{
       char ope[MAX];
       int exit=1;
       do
       {
               scanf("%s", &ope);
               printf("strcmp(ope,limpa)=%d\n",strcmp (ope,"limpa"));
               printf("strcmp(ope,'sair')=%d\n",strcmp (ope,"sair"));

       }while(exit!=0);
}

marciovos

mano sei que o scanf tambem tem essa função de ler
mas ele nao trata tantos erros
como esse sistema meu precisa
mesmoa assim agradeço.


Galera descobrir que
ao ler com fgets ele insere do "vetor" o que eu escrevi + /0, diante disso
deveria trocar esse /0 por algum caracter
para quando comparar como  strcmp
ai vai dar certo
alguem poderia ajudar
Márcio Vinícius O. Sena - Goiânia/GO - Ubuntu 9.10 & W7- HP Pavilion dv4. 4gb. ATI 256mb. 300gb.

jeflui

Depois do seu fgets, de um simples printf na variável vai perceber que ela não está recebendo o que foi digitado. Por isso não está funcionando o strcmp.

HelderC

cara, faz o seguinte:

...
qualquerVariavel = strcmp (ope,"limpa");

printf("strcmp(ope,limpa)=%d\n",qualquerVariavel);
...


Entendeu? Utiliza o strcmp para jogar o valor de retorno numa variavel e depois usa essa variavel no printf.
Já tive um problema assim, mas no meu caso, eu havia colocado o strcmp em um if... if (strcmp(...))...

flw.

fpissarra

Citação de: marciovos online 28 de Março de 2010, 22:36
mano sei que o scanf tambem tem essa função de ler
mas ele nao trata tantos erros
como esse sistema meu precisa
mesmoa assim agradeço.


Galera descobrir que
ao ler com fgets ele insere do "vetor" o que eu escrevi + /0, diante disso
deveria trocar esse /0 por algum caracter
para quando comparar como  strcmp
ai vai dar certo
alguem poderia ajudar

Leia sobre o comportamento de fgets:

fgets()
       reads in at most one less than size characters from stream  and
       stores  them  into  the buffer pointed to by s.  Reading stops after an
       EOF or a newline.  If a newline is read, it is stored into the  buffer
.
       A '\0' is stored after the last character in the buffer


Ou seja, o \r que você digita ao final da string (em stdin) é colocado na string em "opt". Note que se você imprimir um strlen(ope) obterá 6 para a string "limpa", digitada...

Assim, "limpa\r" é sempre maior que "limpa".