stinga 0 Denunciar post Postado Junho 24, 2008 Oi pessoal sou novo aqui, ficaria muito grato se pudessem me ajudar com meu código. Eu tô fazendo um programa em C pra ler um arquivo de texto, que é estruturado dessa forma: [codigo usuario]; [nome] ;[cpf];[telefone] ;[dependente ou filho ou esposa] ;[digito];[codigo dependente] No momento consigo ler o codigo de usuário e armazenar num vetor, imprime legal. O problema é o nome, como podem ver existe um monte de espaços entre o nome e o próximo ";" que eu estou usando pra separar as seções do texto. Com esse código: #include <stdio.h> #include <conio.h> #include <string.h> main(){ FILE *fp; char c; unsigned int //fcod[8], // codigos dos funcionarios fcpf[11], // cpf do funcionario ffone[9], // telefone do funcionario dcod[10][10]; // codigo do dependente char func[100]; char fcod[8]; char dep[10][100]; /// cod[8]; funcionario; cpf[11]; telefone[15]; dependente[100]; digito[1]; cod[8] //sec 1 2 3 4 5 6 7 char lastc; int i=0, sec=1; printf("\n\nVALOR de SECAO %d\n\n",sec); fp = fopen("dependentes.txt", "r"); //// tentei inicializar as posições da string assim mas dá erro /*for(i=0; i<99; i++) func[i] = "a"; /**/ while((c = getc(fp) ) != EOF) { if (c == 59) // se; { puts("achou uma;"); sec+=1; i = 0; printf("\nSecao atual: %d\n\n", sec); continue; } if (sec==1) fcod[i] = c; if (sec==2) { if (c == 32 && lastc == c) /// se houver espaços em branco consecutivos { if (getc(fp) != 32) func[i] = c; //break; } else { func[i] = c; printf("\n-Adicionou = %c\nUltimo c = %c", c, lastc); } } i++; lastc = c; } int ftam=0; ftam = strlen(func); printf("\n:: TAM: %d ::\n", ftam); // gravando codigo do usuario for (i=0; i<8; i++) printf("%c",fcod[i]); printf("\t"); // gravando nome do usuario for (i=0; i < ftam; i++) printf("%c",func[i]); /**/ fclose(fp); getch(); } Quando executo o código, ele está adicionando uns caracteres nada a ver no final. Por isso peço ajuda pra ver o que pode ser. Com o código acima, eu criei um IF pra identificar os espaços em branco "32", e usei a variavel lastc (last char) pra identificar o ultimo caractere q entrou, assim eu comparo, se o char atual for um espaço, e o ultimo char for espaco tbm, ele encerra, mas ao que parece ele adiciona uns simbolos ainda, eu não consegui achar o furo do problema. Ficaria imensamente grato se puderem me ajudar. Futuramente eu usarei isso pra fazer inserções no banco de dados, por isso tenho q formatar. Valeu. Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Junho 24, 2008 Logo após a saída do laço insira essa linha: func[i] = '\0'; Veja se resolve. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
stinga 0 Denunciar post Postado Junho 24, 2008 Logo após a saída do laço insira essa linha: func[i] = '\0'; Veja se resolve. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Colocando assim: if (c == 32 && lastc == c) /// se houver espaços em branco consecutivos { if (getc(fp) != 32) func[i] = c; else func[i] = '\0'; } Resolveu cara, mas porque isso? É pra fazer com que o programa não considere as outras posições vazias? E isso indica o sinal de término da string, é mais ou menos isso? Valeu mesmo! Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Junho 24, 2008 Voce tem um vetor de caracteres de 100 posições. Quando insere uma string nesse vetor precisa indicar onde ela termina. É ai que entra o '\0'. Se voce não indicar o termino de string ele interpretará que voce possui uma string com 100 caracteres de tamanho. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites