Biglwp Postado Maio 20, 2010 Denunciar Share Postado Maio 20, 2010 (editado) 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 Maio 23, 2010 por Jonathan Queiroz Remover palavra "ajuda" do título conforme regra 3.6 (Jonathan) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Maio 21, 2010 Denunciar Share Postado Maio 21, 2010 (editado) 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 Maio 21, 2010 por RonaldoRG Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Biglwp Postado Maio 21, 2010 Autor Denunciar Share Postado Maio 21, 2010 (editado) 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 Maio 21, 2010 por Biglwp Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Maio 21, 2010 Denunciar Share Postado Maio 21, 2010 O que acontece quando se coloca entradas muito grande? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Biglwp Postado Maio 22, 2010 Autor Denunciar Share Postado Maio 22, 2010 o programa compila, porem não responde. não chega ao final do codigo (retornar 0). e não imprime nada no arquivo de saida. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Maio 22, 2010 Denunciar Share Postado Maio 22, 2010 (editado) 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 Maio 22, 2010 por RonaldoRG Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Biglwp Postado Maio 23, 2010 Autor Denunciar Share Postado Maio 23, 2010 realmente não está lendo corretamente. está lendo 2293564 no lugar de 5000. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Maio 24, 2010 Denunciar Share Postado Maio 24, 2010 Por isso que o programa tá fechando.Posta a parte inicial do seu arquivo de entrada "in.txt" para a gente ver como tá. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Biglwp
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:
qual seria o erro no código? o programa entra em algo parecido a um loop "infinito".
ajudas...
Editado por Jonathan QueirozRemover 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
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.