0
Good night! I’m trying to store some variables in a struct with a .dat. My goal is to take each line of this file and store it in a vector position of the struct. The Qtd and the track are working, but the old words[3][17] that should store up to 3 values is giving error. Follow the code:
#include <stdio.h>
#include <stdlib.h> // exit
#include <string.h>
typedef struct
{
char pista[17];
int qtd;
char vetpalavras[3][17];
} Jogo;
Jogo jogo[5];
int main(void)
{
int qtd, i,j;
char url[] = "palavras.dat", pista[17], vetpalavras[3][17];
printf("*\n");
FILE *arq = fopen(url, "r");
if (arq == NULL)
{
printf("* erro, nao foi possivel abrir o arquivo\n");
printf("*\n");
exit(1);
}
for (j = 0; j < 5; j++)
{
// primeiro faz a leitura do nome e da quantidade de palavras
if (fscanf(arq,"%16s %d", pista, &qtd) != 2)
{
// nao conseguiu ler os 2 campos
// e' fim de arquivo ?
if (feof(arq)) {
printf("* ok, fim de arquivo\n");
} else
printf("* erro no conteudo do arquivo\n");
printf("*");
exit(0);
}
// neste ponto leu o nome e a quantidade de palavras
// agora vai ler as palavras
if (qtd > 3)
qtd = 3;
for (i = 0; i < qtd; i++)
{
if (fscanf(arq, "%16s", vetpalavras[i]) != 1)
{
printf("* erro no conteudo do arquivo\n");
printf("*\n");
exit(2);
}
}
// ok, leu as palavras
printf("* nome=%-10s qtd=%d", pista, qtd);
for (i = 0; i < qtd; i++)
printf(" %s", vetpalavras[i]);
strcpy(jogo[j].vetpalavras[i], vetpalavras[i]);
jogo[j].qtd=qtd;
strcpy(jogo[j].pista, pista);
printf("\n\nTeste:\n quantidade: %d\n pista: %s\n palavras:%s\n\n", jogo[j].qtd,jogo[j].pista,jogo[j].vetpalavras[i]);
printf("\n");
}
fclose(arq);
}
How can I fix this?
word file.dat:
Vegetal 2 ACELGA ALFACE
Automovel 3 MOTOR EMBREAGEM ESCAPAMENTO
Cozinha 3 PRATO PANELA FOGAO
Reptil 1 JARARACA
Mamifero 2 BALEIA MACACO
Exit:
* nome=Vegetal qtd=2 ACELGA ALFACE
Teste:
quantidade: 2
pista: Vegetal
palavras:
* nome=Automovel qtd=3 MOTOR EMBREAGEM ESCAPAMENTO
Teste:
quantidade: 3
pista: Automovel
palavras:
* nome=Cozinha qtd=3 PRATO PANELA FOGAO
Teste:
quantidade: 3
pista: Cozinha
palavras:
* nome=Reptil qtd=1 JARARACA
Teste:
quantidade: 1
pista: Reptil
palavras:PANELA
* nome=Mamifero qtd=2 BALEIA MACACO
Teste:
quantidade: 2
pista: Mamifero
palavras:FOGAO
In C we use the strcpy function to copy strings and not the assignment with =.
– anonimo
Note that after the comment"//ok, read the words" you use the variable j as index but the content of this variable is 5, the value you left the previous loop you used it with.
– anonimo