Jump to content

Problema em C


sYnced

Recommended Posts

Boa noite,

Bem pessoal vou tentar ser direto no assunto, eu tinha tudo funcional até hoje ter feito algumas modificações hoje, depois disso o meu código não entrou mais dentro do ciclo while:

vou por aqui um exerto do código, se alguém me conseguir ajudar agradeço:

void SendMsg(int sock)
{
	//zona de variáveis
	int tM = 4096;
	int n;
	int logged = 0;
	char buffer[tM];
	char nickname[tM];
	bzero(buffer, tM);
	//enviar catacter de comando para o utilizador	
	write(sock, "Efectue login por favor\r\n", 24);
 
	//establecer um nickname
	read(sock, buffer, tM);
 
	printf("%s", buffer);
 
	int sc = strncmp(buffer, "utilizador",10);			
	//verificar se quer criar utilizador
	int criaU = strncmp(buffer, "criautilizador", 14);	
	if(criaU == 0)
	{
			//o utilizador é criado
			//código aqui
			printf("Utilizador criado com sucesso");
			logged = 1;	
	}
	if((sc < 0 || sc > 0) && logged != 1)
	{			
		write(sock, "Erro ao efetuar login", 21);
	}	
	else
	{
		logged = 1;
	}
	if(logged == 1)
	{
 
		char *temp = devString(buffer);
		if(temp[0] == ' ')
			temp++;
 
		memset(nickname, 0, LEN);
		strcpy(nickname, temp);
		//poder receber mensagens do utilizador até que o mesmo queira que pare	
		write(sock, "% ", 2);	
		while(1)
		{
			printf("entrou no while");
			char *resultado;
			char fecho[8] = "termina";
			int i = 0;
			strcpy(resultado, buffer);
			//Primeiro comando recebido
		n = read(sock, buffer, tM);	
			int result = strncmp(resultado, fecho, 7);
			printf("%d", n);
			if(n < 0)
			{
				printf("Erro a enviar a mensagem\r\n");
			}
			if(result == 0)
			{
				n = write(sock, "Boa viagem\r\n", 10);			
				break;
			}
 
			n = write(sock, "% ",2);
 
			//aqui executamos as restantes apps
			int casos[6];			
			casos[0] = strncmp(buffer, "entregamsg", 10);
			casos[1] = strncmp(buffer, "consultamsg", 11);
			casos[2] = strncmp(buffer, "retiramsg", 9);
			casos[3] = strncmp(buffer, "removeutilizador", 16);
			casos[4] = strncmp(buffer, "listautilizador", 15);
			casos[5] = strncmp(buffer, "utilizador", 10);
 
 
			//case switch aqui
			int helper = -1;
			for(; i < sizeof(casos);i++)
			{
				if(casos[i] == 0)
					helper = casos[i];
			}						
			if (helper != -1)
			{
				switch(helper)
				{
					case 0:
					//codigo de enviar msg
						break;
					case 1:
					//consultar msg
						break;
					case 2:
					//retira msg
						break;
					case 3:
						n = write(sock,"Impossível remover utilizador depois de logado", 47);
						break;
					case 4:
					//lista utilizadores
						break;
					case 5:
						n = write(sock, "Impossível executar este comando depois de logado", 52);
						break;
					default:
						n = write(sock, "Comando inválido", 60);
						break;
				}
			}			
 
			printf("%s",buffer);
			memset(buffer, 0, LEN);
		}
	}
}
Link to comment
Share on other sites

se foste directo ao assunto, então eu também vou ser : resolver problemas nunca é olhar para um excerto de código, qual seja o tamanho deste.

é olhar para os sintomas (o que faz e o que deveria fazer) e só depois olhar para o código. o que quero dizer é que a forma que apresentas o problema nunca levaria a uma resposta satisfatória por parte de alguem do fórum

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.