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 769 korisnika na forumu :: 33 registrovanih, 6 sakrivenih i 730 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: A.R.Chafee.Jr., AK - 230, alkatraz080, amater01, Atomski čoban, babaroga, BasCelik, Boris90, celik, Cirkon, cole77, Dimitrise93, Duško, goxin, HrcAk47, ikan, Imperator41, krkalon, Krusarac, ljiljak, mikrimaus, nenad81, oddsock, pera bager, RJ, royst33, sosko, sovanova95, stegonosa, tomigun, Viceroy, voja64, zlaya011