Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Localhost

Dúvida relativamente a um loop

Mensagens Recomendadas

Localhost

Olá, já estive aqui a tentar descobrir mas, não percebo porque é que quando ele entra no loop para ir até ao final do ficheiro não sai do mesmo...

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

int main(void) {
char s_in[1000];
char s_out[1000];
char s_check[100];
char f_code[100];
char f_decode[100];
FILE *in;
int i_cont=0,i_space=0,i_str=0,i_cont2=0,i_cont3=0;
if(!(in=fopen("words.txt","r"))) {
	puts("Error opening file\n");
	exit(1);
}
printf("What's the message: ");
scanf("%s", s_in);
while(s_in[i_cont]) {
	while(s_in[i_space] != ' ') {
		s_check[i_str] = s_in[i_space];
		i_space++;
		i_str++;
	}
	while(!feof(in)) {
		fscanf(in,"%s",f_code);
		fscanf(in,"%s",f_decode);
		if(!(strcmp(f_code,s_check))) {
			while(f_decode[i_cont2] != '\0') {
				s_out[i_cont3] = f_decode[i_cont2];
				i_cont2++;
				i_cont3++;
			}
			break;
		}
	}
	while(s_in[i_space] != ' ') {
		s_out[i_cont3] = s_check[i_space];
		i_space++;
		i_cont3++;
	}
}
printf("%s\n", s_out);
return(0);
}

Alguma ajuda?

P.s. Este programa tem o intuito de "descodificar" mensagens escritas pela suposta geração de futuro portuguesa...


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Que erro estupido, até tenho vergonha de o ter mostrado. Obrigado, o programa já está operacional.

Já agora para quem quiser isto para perceber as mensagens dos filhos (a geração perdida) fica aqui o programa e uma pequena lista de palavras:

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

int main(void) {
char s_in[1000];
char s_out[1000];
char s_check[100];
char f_code[100];
char f_decode[100];
FILE *in;
int i_cont=0,i_space=0,i_str=0,i_cont2=0,i_cont3=0;
if(!(in=fopen("words.txt","r"))) {
	puts("Error opening file\n");
	exit(1);
}
printf("What's the message: ");
scanf("%s", s_in);
while(s_in[i_cont]) {
	while(s_in[i_space] != ' ') {
		s_check[i_str] = s_in[i_space];
		i_space++;
		i_str++;
	}
	while(!feof(in)) {
		fscanf(in,"%s",f_code);
		fscanf(in,"%s",f_decode);
		if(!(strcmp(f_code,s_check))) {
			while(f_decode[i_cont2] != '\0') {
				s_out[i_cont3] = f_decode[i_cont2];
				i_cont2++;
				i_cont3++;
			}
			break;
		}
	}
	while(s_in[i_space] != ' ') {
		s_out[i_cont3] = s_check[i_space];
		i_space++;
		i_cont3++;
	}
	i_cont++;
}
printf("%s\n", s_out);
return(0);
}

olah ola
k que
windu lindo
u o
axx assinado
meninuh menino
exkola escola

A lista de palavras é pequena eu sei, quem quiser aumentar que o faça e que a poste aqui...


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
vasco16

Só uma coisa: Aquele break vai fazer com que quebre qual laço?

Não tenho a certeza mas penso que quebre isto:

while(s_in[i_space] != ' ') {
                        s_out[i_cont3] = s_check[i_space];
                        i_space++;
                        i_cont3++;
                }
                i_cont++;
        }

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Não, agora é que vi, ele quebra o while de busca no ficheiro. Eu estou agora a ter aqui alguns problemas, alguém podia ver?

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

int main(void) {
char s_in[1000];
char s_out[1000];
char s_check[100];
char f_code[100];
char f_decode[100];
FILE *in;
int i_cont=0,i_space=0,i_str=0,i_cont2=0,i_cont3=0,i_cont4=0;
if(!(in=fopen("words.txt","r"))) {
	puts("Error opening file\n");
	exit(1);
}
printf("What's the message: ");
scanf("%s", s_in);
while(s_in[i_cont] != '\0') {
	while(s_in[i_space] != ' ') {
		s_check[i_str] = s_in[i_space];
		i_space++;
		i_str++;
	}
	printf("%s\n", s_check);
	while(!feof(in)) {
		fscanf(in,"%s",f_code);
		fscanf(in,"%s",f_decode);
		if(!(strcmp(f_code,s_check))) {
			while(f_decode[i_cont2] != '\0') {
				s_out[i_cont3] = f_decode[i_cont2];
				i_cont2++;
				i_cont3++;
			}
			break;
		}
	}
	while(s_check[i_cont4] != '\0') {
		s_out[i_cont3] = s_check[i_cont4];
		i_cont4++;
		i_cont3++;
	}
	i_cont++;
}
printf("%s\n", s_out);
return(0);
}


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
vasco16

Não, agora é que vi, ele quebra o while de busca no ficheiro. Eu estou agora a ter aqui alguns problemas, alguém podia ver?

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

int main(void) {
char s_in[1000];
char s_out[1000];
char s_check[100];
char f_code[100];
char f_decode[100];
FILE *in;
int i_cont=0,i_space=0,i_str=0,i_cont2=0,i_cont3=0,i_cont4=0;
if(!(in=fopen("words.txt","r"))) {
	puts("Error opening file\n");
	exit(1);
}
printf("What's the message: ");
scanf("%s", s_in);
while(s_in[i_cont] != '\0') {
	while(s_in[i_space] != ' ') {
		s_check[i_str] = s_in[i_space];
		i_space++;
		i_str++;
	}
	printf("%s\n", s_check);
	while(!feof(in)) {
		fscanf(in,"%s",f_code);
		fscanf(in,"%s",f_decode);
		if(!(strcmp(f_code,s_check))) {
			while(f_decode[i_cont2] != '\0') {
				s_out[i_cont3] = f_decode[i_cont2];
				i_cont2++;
				i_cont3++;
			}
			break;
		}
	}
	while(s_check[i_cont4] != '\0') {
		s_out[i_cont3] = s_check[i_cont4];
		i_cont4++;
		i_cont3++;
	}
	i_cont++;
}
printf("%s\n", s_out);
return(0);
}

Tenta não usar os ciclos encadeados. Faz uma operação de cada vez:

1º ler ficheiro:

2º fazer descodificação x;

3º fazer descodificação y;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Tenho de usar neste caso porque tenho de ler do ficheiro, comparar e adicionar à string tudo num só loop que é enquanto a string que recebe a mensagem for diferente de \0 senão não dava mas se tiveres alguma sugestão para fazer o que disseste com um exemplo concreto agradeço...


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.