Problema com leitura de arquivo em c. [RESOLVIDO]

1. Problema com leitura de arquivo em c. [RESOLVIDO]

rob
robgeek

(usa Debian)

Enviado em 09/12/2014 - 21:03h

Boa noite!

Queria fazer um programa que lê um arquivo de texto no formato abaixo e transforma os números lidos em inteiros, mas o meu programa, quando roda, dá bug. No momento estou usando Windows 7 apesar de no meu perfil esteja escrito Debian.

Formato do arquivo:
robgeek //nome do usuario
0 // representa os pontos vai de 0 ate 99
000000 // valores entre 0 e 1
000000 // idem
000000 // idem
000000 // idem
000000 // idem
000000 // idem


Código c: É a primeira parte, ainda não fiz a parte que muda de char para int.
#include <stdio.h>

int main( ) {
FILE *arq = fopen("savegame.txt", "r");
char carac;
char nome[10];
char pontos[2];
char historico[6];
int i, linha = 1;

if( arq ) {
while( !feof( arq ) ) {
i = 0;

if(linha == 1) {
while((carac = fgetc( arq )) != '\n') {
nome[i] = carac;
i++;
}
printf("\nNa linha %d = %s",linha, nome);
}
else if(linha == 2) {
while((carac = fgetc( arq )) != '\n') {
printf("(%c)", carac);
pontos[i] = carac;
i++;
}
printf("\nNa linha %d = %s",linha, pontos);
}
else {
while((carac = fgetc( arq )) != '\n') {
historico[i] = carac;
i++;
}
printf("\nNa linha %d = %s",linha, historico);
}

linha++;
}

fclose( arq );
}
else {
printf("\nArquivo NAO existe.\n");
}

return 0;
}


Saída dando bug:
robgeek<0>
0örobgeek
000000örobgeek
000000örobgeek
000000örobgeek
000000örobgeek
000000örobgeek
000000örobgeek


Como eu resolvo este problema?


  


2. MELHOR RESPOSTA

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 11/12/2014 - 13:32h

Amigo , vou te explicar como funciona o fgets :


char * fgets ( char * str, int num, FILE * stream );


Onde :

char * str é uma array de char onde a string lida vai ser "colada";
int num é a quantidade de caracteres "maximos" permitidos;
FILE * stream é um ponteiro do tipo FILE de onde vai ser "copiada".

Um exemplo :


#include <stdio.h>

int main(){
char vetor[100];
printf("Digite uma frase : ");
fgets(vetor,100,stdin);
return 0;
}


Assim irá colocar no vetor até 99 carcteres + o '\ 0' direto do stdin.

Outro exemplo é assim :


#include <stdio.h>

int main(){
char vetor[1000];
FILE * arq = fopen("arquivo.txt","r");
// Aqui vai colocar todos os caracteres (no max 999) no vetor "vetor"
// Nota : 999 chars + '\ 0'
while(fgets(vetor,1000,arq) != NULL);
printf("O arquivo tem : %s",vetor);
return 0;
}



Espero ter ajudado

[]'s

T+



3. Re: Problema com leitura de arquivo em c. [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 10/12/2014 - 09:49h

Por que você está lendo caráter a caráter? Use fgets() e fscanf().


4. Re: Problema com leitura de arquivo em c. [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 11/12/2014 - 12:26h


Melhor mudar isso:



char nome[10];
char pontos[2];
char historico[6];




Para isso:



char nome[1024];
char pontos[1024];
char historico[1024];




E seguir a dica do nosso colega acima.

T+.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts