Ir para conteúdo
Fórum Script Brasil
  • 0

Leitura em arquivo


Biglwp

Pergunta

estou tentando fazer um programa que pega como entrada varias strings de um certo arquivo de texto.

a entrada é nesse esquema:

inteiro "n" (quantidade de strings abaixo)

string 1

string 2

...

string "n" EOF (fim do arquivo)

ou seja, a primeira linha contém a quant de strings que terei que ler (uma em cada linha).

fiz o código abaixo para armazaenar as strins em uma matriz, mas o programa não está rodando, e eu não consigo identificar o erro:

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

int main()
{
    FILE * nfile = fopen ("in.in", "r");
    int n;
    fscanf (nfile, "%d", &n);
    char * str [n];
    int i, a;
    char c;
    for (i = 0; i <= n; i++)
    {
        a = 0;
        while ((c = fgetc (nfile)) != '\n')
        {
            a++;
        }
        str [i] = (char *) malloc ((a + 1) * sizeof (char));
        fseek (nfile, a, SEEK_CUR);
        fscanf (nfile, "%s", str [i]);
    }
    for (i = 0; i <= n; i++)
    {
        printf ("\n%s", str [i]);
    }

    return 0;
}

qual seria o erro no código? o programa entra em algo parecido a um loop "infinito".

ajudas...

Editado por Jonathan Queiroz
Remover palavra "ajuda" do título conforme regra 3.6 (Jonathan)
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Primeiro troca:

char * str [n];
Por
char str [n];
Agora essa parte tá estranha:
for (i = 0; i <= n; i++)
    {
        a = 0;
        while ((c = fgetc (nfile)) != '\n')
        {
            a++;
        }
        str [i] = (char *) malloc ((a + 1) * sizeof (char));
        fseek (nfile, a, SEEK_CUR);
        fscanf (nfile, "%s", str [i]);
    }
Testa esse:
...
char str[n][MAX];

for (i = 0; i < n; i++)
    {
       fscanf (nfile, "%s", &str[i]);
    }

 for (i = 0; i < n; i++)
    {
        printf ("\n%s", str[i]);
    }

Depois posta o resultado.

Editado por RonaldoRG
Link para o comentário
Compartilhar em outros sites

  • 0

troquei pelo teu código, e passou a funcionar para entradas pequenas (testei com algumas de no maximo 5 strings).

só não está funcionando para entradas muitos grandes ( 5 mil strings por ex), provavelmente algum conflito de memoria.

o novo código está assim:

#include <stdio.h>
#include <stdlib.h>
#define MAX 1847

int main()
{
    FILE * nfile = fopen ("in.txt", "r");
    FILE * out = fopen ("out.txt", "w");
    long int n;
    fscanf (nfile, "%ld", &n);
    char str [n][MAX];
    int i;
    for (i = 0; i < n; i++)
    {
        fscanf (nfile, "%s", &str[i]);
    }
    for (i = 0; i < n; i++)
    {
        fprintf (out, "%s\n", str [i]);
    }
    return 0;
}

Editado por Biglwp
Link para o comentário
Compartilhar em outros sites

  • 0

Execute seu programa até essa parte:

...
 fscanf (nfile, "%ld", &n);

Comente o restante abaixo disso e dê um printf na variável n pra ver se o programa tá lendo o número de strings corretamente do arquivo.

Depois posta o resultado. Abraço.

Editado por RonaldoRG
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...