Procitati jednu liniju iz .txt fajla

Procitati jednu liniju iz .txt fajla

offline
  • Pridružio: 10 Mar 2009
  • Poruke: 101
  • Gde živiš: Podgorica

Uspio sam da napisem kod da procita citav fajl, e sad mene treba ta jedna linija.
Kako sam ja shvatio, fgets() cita jednu liniju, a ako stavim while(!feof(pFile)) on cita liniju po liniju sve do kraja... E sad razmisljao sam kako ja mogu da iscitam jednu linju koju ja zelim.. Unesem jedan broj, e sad stavim line=1 (broj linije) i i=3 na primer...

Kada program prodje kroz petlju while, stavim da samo ako su line i i jednaki da ispise tu liniju, znaci nesto ovako

#include <stdio.h> main() {       FILE *pFile;       char liner[81];       int i, line=1;             //Open file       pFile = fopen("doc.txt", "r");             if(pFile != NULL)       {                scanf("%d", &i);                while(!feof(pFile))                {                     if(i == line)                     {                        fgets(liner, 81, pFile);                        printf("%s", liner);                        }                     line++;                     }                }       getch(); }
Ali ne radi bas najbolje, ispise samo prvu liniju txt fajla, i stane, kao da zablokira ... :/
Help



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

Izvadi line++ iz petlje.



offline
  • Pridružio: 10 Mar 2009
  • Poruke: 101
  • Gde živiš: Podgorica

Sad u opste ne ispise ni prvu liniju.
Je li iz while petlje?

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

#include <stdio.h> main() {       FILE *pFile;       char liner[81];       int i, line=1;             //Open file       pFile = fopen("doc.txt", "r");             if(pFile != NULL)       {                scanf("%d", &i);                while(!feof(pFile))                {                     fgets(liner, 81, pFile);                     if(i == line)                        printf("%s", liner);                     }                     line++;                }       getch(); }

offline
  • Pridružio: 10 Mar 2009
  • Poruke: 101
  • Gde živiš: Podgorica

probao sam da stavim line++ unutar petlje a ovo koliko vidim fgets() si ti izvukao i sad radi evo koda

#include <stdio.h> main() {       FILE *pFile;       char liner[81];       int i, line=1;             //Open file       pFile = fopen("doc.txt", "r");             if(pFile != NULL)       {                scanf("%d", &i);                while(!feof(pFile))                {                     fgets(liner, 81, pFile);                     if(i == line)                        printf("%s", liner);                     line++;                     }                                    }       getch(); }

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

Jes', gore sam se zabrojao u zagradama Smile
Sorry, ja to vise po logici, posto ne "pricam" C/C++ (zagrizeni Pascalovac Smile )

offline
  • Pridružio: 10 Mar 2009
  • Poruke: 101
  • Gde živiš: Podgorica

Sad je iskrso novi problem Very Happy
Za sad napravio sam program koji uzme jednu liniju koju ja izaberem iz fajla pitanja.txt a iz fajla odgovori.txt uzme liniju i memorise je negde u memoriji u stringu koji sam nazvao mem[81]. Sve normalno, pitanje 1 glasi, Glavi grad Crne Gore? to je iz pitanja.txt a ovamo u odgovori.txt se nalazi u liniji 2 (posto nece da cita prvu liniju, to nibetni rijesio sam taj problem) 'Podgorica' i on sve normalno to pokupi iz fajlova, e sad dolazim do sledeceg.
Zelim da ukucam odgovor i da taj odgovor uporedi sa ovim iz odgovori.txt a taj odgovor je smjesten u stringu mem[81]. Kad ih uporedim na sledeci nacin k=strcmp(odgovor,mem), Koliko sam shvatio on uporedjuje karakter po karakter i ako su svi karakteri isti, on mene treba da vrati rezultat k=0, a on mi vrati -1 ili 1, nikako nulu xD

Kod:
#include <stdio.h> #include <string.h> main() {       FILE *pFile;       FILE *oFile;       char liner[81], odgovor[81], mem[81];       int i, line=1, k=1;             //Open file       pFile = fopen("pitanja.txt", "r");             if(pFile != NULL)       {                scanf("%d", &i);                while(!feof(pFile))                {                    fgets(liner, 81, pFile);                                   if(i == line)                    {                        printf("%s", liner);                        }                    line++;                    }                }       else       {           printf("File does not exist.");           getch();           }                 fclose ( pFile );                printf("\n\n Broj linija: %d", line-1);             line=1;       oFile = fopen("odgovori.txt", "r");             if(oFile != NULL)       {                while(!feof(oFile))                {                   fgets(liner, 81, oFile);                   if(i == line)                   {                        fgets(mem, 81, oFile);                        }                   line++;                   }       }       printf("\n\n Uneste odgovor:");       getchar();       gets (odgovor);             printf("\n\n vas odgovor %s", odgovor); // Ovjde ispisuje ono sto se unosi kao odgovor       printf("\n fgets %s", mem);   // Ovdje ispisuje ono sto je izvukao iz odgovori.txt             k=strcmp(odgovor,mem);       if(k == 0)           printf("\nTacno");       else           printf("\nNetacno");                 printf("\nk = %d", k);                 getch(); }                                     ]

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

      if(oFile != NULL)       {                while(!feof(oFile))                {                   fgets(liner, 81, oFile);                   if(i == line)                   {                        fgets(mem, 81, oFile);                        }                   line++;                   }       }
Dva puta fgets - ti si presao vec na sledece pitanje i sledeci odgovor, a ne na onaj koji si zeleo.

offline
  • Pridružio: 10 Mar 2009
  • Poruke: 101
  • Gde živiš: Podgorica

Stavio sam tu strcpy(mem, liner), znaci iz stringa liner da kopira u string mem, i kasnije stavim output da mi pise sto sam ja unio (pise tacno ono sto sam unio) i output sta je program uzeo iz odgovori.txt

Moj unijeti odgovor i odgovor koji je uzet iz fajla su identicni a on mi pise da je Netacno i da je k= -1 ili 1a trebalo bi da dobijem da je k=0 ako je identicno i onda ce prema if(k==0) printf("Tacno"); da mi kaze da je rezultat tacan, ako se imalo razlikuje ispisace da je rezultat netacan (else printf("Netacno");

Ko je trenutno na forumu
 

Ukupno su 888 korisnika na forumu :: 27 registrovanih, 10 sakrivenih i 851 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, aleksmajstor, cinoeye, dankisha, Dimitrije Paunovic, Fog of War, Georgius, HrcAk47, jaeger, kihot, Kubovac, Mika_NS, Mixelotti, ozzy, Parker, pedja.st, pein, Pohovani_00, raptorsi, Shinobi, SlaKoj, Srle993, theNedjeljko, trundle, VP6919, šumar bk2, žeks62