Ir ao conteúdo

Posts recomendados

Postado

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");
}

 

Postado

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
Postado

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

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!