Ir ao conteúdo
  • Cadastre-se

C Comparação de Strings incorreta


Juan Damo

Posts recomendados

Boa tarde,

O código abaixo basicamente serve para criar um comando próprio chamado "renomeiaDir", eu poderei dar dois parâmetros para ele "renomeiaDir <Diretório Origem> <Diretório Destino>. Essa parte está ok, porém precisarei depois criar mais comandos, e para cada comando precisarei criar um IF, e para entrar no IF criei um while que deve ler a primeira string e guardar na variável "SC", essa variável receberá o comando e será comparado com as variáveis que estão em Comandos, se for igual entra no IF e executa o restante dos parâmetros. porém esse while e/ou a comparação tem alguma coisa que não estou entendendo que não deixa entrar no IF.

Obrigado pelo auxílio.

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


int main() {
	//VARIÁVEIS GLOBAIS ==================================
	char cmd01[60];										//
	char sourceFile[1024];								//
	char destFile[1024];    
	char letra;
	char SC[50];
    int contador = 1;
    int quantidade_comandos = 1;
	char matriz_de_comandos[quantidade_comandos][50];
	//==================================================
	
	//COMANDOS GERAIS ==================================
	char renomearDir[50] = "renomearDir:"; //Aqui seria o conteudo da string para comparar e entrar no if
	char exit[10] = "exit\n";//A comparacao do exit para entrar no IF funciona
	//==================================================
	
		printf("ht-C0mmand >>  ");
   		fflush(stdin);
   		fgets(cmd01, 60, stdin);    
    
    	while(cmd01[contador] != '\0'){  //Aqui separar a string renomearDir e guarda na variavel SC
			SC[contador]=cmd01[contador];
	   		contador++;    	
		}
		
    	printf("|DEBUG: Executed command > %s\n", SC);
    	printf("|DEBUG: Command > %s\n", exit);
        printf("|DEBUG: Command > %s\n", renomearDir);
        
		// RENOMEAR ARQUIVO =============================================================
		if (strcmp(SC, renomearDir) == 0){  //Aqui teria que comparar o conteúdo, se for igual retorna zero e entra no if, mas não acontece
    		printf("Debug| NO IF\n");       //porém se trocar para 1, queé o retorno de string diferente, ele entra, então seria somente
    		int contador_comandos = 1;		//a comparacao que tem algo que eu ainda não peguei
   			int contador_letras = 0;
    		for (contador=0; contador < strlen(cmd01)-1; contador++) {
        		letra = cmd01[contador];
        	if (letra == ' ') {
            	matriz_de_comandos[contador_comandos-1][contador_letras] = '\0';
            	contador_comandos++;
            	contador_letras = 0;
            	continue;
        		}
        	matriz_de_comandos[contador_comandos-1][contador_letras] = letra;
        	contador_letras++;
    		}
			matriz_de_comandos[contador_comandos-1][contador_letras] = '\0';
   			// BACKUP strcpy(sourceFile, matriz_de_comandos[0]);
    		strcpy(sourceFile, matriz_de_comandos[quantidade_comandos]);
			printf("Debug | first path> %s \n", sourceFile);
			strcpy(destFile, matriz_de_comandos[quantidade_comandos+1]);
    		printf("Debug | second path> %s \n", destFile);
			rename (sourceFile, destFile);
			}  
		//===============================================================================
		// EXIT =========================================================================
		if (strcmp(SC, exit)==0){
			printf("SAINDO!\n=====");	
		}
	    
		
    system("pause");
}

 

Link para o comentário
Compartilhar em outros sites

Primeiramente, contador tem que começar em zero e NÃO em um:

 int contador = 0;

Continuando, quando você usa o fgets, tudo que é entrado faz parte da variável cmd01, inclusive o ENTER que você digita. Uma solução é suar scanf:

	printf("ht-C0mmand >>  ");
    fflush(stdin);
	scanf("%s", cmd01);

Porém, se quiser continuar usando o fgets, tem que remover o último caractere:

printf("ht-C0mmand >>  ");
   		fflush(stdin);
   		fgets(cmd01, 60, stdin);    
fgets[strlen(fgets) - 1] = '\0'; //remove o enter ('\n')

Além disso, você tem que marca o fim da string SC:

while(cmd01[contador] != '\0'){  //Aqui separar a string renomearDir e guarda na variavel SC
			SC[contador]=cmd01[contador];
	   		contador++;    	
		}
		SC[contador]='\0';

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Boa tarde Flávio Pedroza,

 

Obrigado pela ajuda. Consegui resolver entrando no IF da seguinte forma: 

 

fgets(cmd01, 60, stdin);    
           printf("|DEBUG1: %s", &cmd01);
               
        while(cmd01[contador] != ' '){  //Aqui separar a string renomearDir e guarda na variavel SC
            SC[contador]=cmd01[contador];
            contador++;        
        }

 

 

Abraços

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!