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

  1. #include <stdio.h>
  2.  
  3. main()
  4. {
  5.       FILE *pFile;
  6.       char liner[81];
  7.       int i, line=1;
  8.      
  9.       //Open file
  10.       pFile = fopen("doc.txt", "r");
  11.      
  12.       if(pFile != NULL)
  13.       {
  14.                scanf("%d", &i);
  15.                while(!feof(pFile))
  16.                {
  17.                     if(i == line)
  18.                     {
  19.                        fgets(liner, 81, pFile);
  20.                        printf("%s", liner);
  21.                        }
  22.                     line++;
  23.                     }
  24.                }
  25.       getch();
  26. }

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

  1. #include <stdio.h>
  2.  
  3. main()
  4. {
  5.       FILE *pFile;
  6.       char liner[81];
  7.       int i, line=1;
  8.      
  9.       //Open file
  10.       pFile = fopen("doc.txt", "r");
  11.      
  12.       if(pFile != NULL)
  13.       {
  14.                scanf("%d", &i);
  15.                while(!feof(pFile))
  16.                {
  17.                     fgets(liner, 81, pFile);
  18.                     if(i == line)
  19.                        printf("%s", liner);
  20.                     }
  21.                     line++;
  22.                }
  23.       getch();
  24. }

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

  1. #include <stdio.h>
  2. main()
  3. {
  4.     FILE *pFile;
  5.     char liner[81];
  6.     int i, line=1;
  7.    
  8.     //Open file
  9.     pFile = fopen("doc.txt", "r");
  10.    
  11.     if(pFile != NULL)
  12.     {
  13.              scanf("%d", &i);
  14.              while(!feof(pFile))
  15.              {
  16.                   fgets(liner, 81, pFile);
  17.                   if(i == line)
  18.                      printf("%s", liner);
  19.                   line++;
  20.                   }
  21.                  
  22.              }
  23.     getch();
  24. }

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:

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. main()
  5. {
  6.       FILE *pFile;
  7.       FILE *oFile;
  8.       char liner[81], odgovor[81], mem[81];
  9.       int i, line=1, k=1;
  10.      
  11.       //Open file
  12.       pFile = fopen("pitanja.txt", "r");
  13.      
  14.       if(pFile != NULL)
  15.       {
  16.                scanf("%d", &i);
  17.                while(!feof(pFile))
  18.                {
  19.                    fgets(liner, 81, pFile);               
  20.                    if(i == line)
  21.                    {
  22.                        printf("%s", liner);
  23.                        }
  24.                    line++;
  25.                    }
  26.                }
  27.       else
  28.       {
  29.           printf("File does not exist.");
  30.           getch();
  31.           }
  32.          
  33.       fclose ( pFile );         
  34.       printf("\n\n Broj linija: %d", line-1);
  35.      
  36.       line=1;
  37.       oFile = fopen("odgovori.txt", "r");
  38.      
  39.       if(oFile != NULL)
  40.       {
  41.                while(!feof(oFile))
  42.                {
  43.                   fgets(liner, 81, oFile);
  44.                   if(i == line)
  45.                   {
  46.                        fgets(mem, 81, oFile);
  47.                        }
  48.                   line++;
  49.                   }
  50.       }
  51.       printf("\n\n Uneste odgovor:");
  52.       getchar();
  53.       gets (odgovor);
  54.      
  55.       printf("\n\n vas odgovor %s", odgovor); // Ovjde ispisuje ono sto se unosi kao odgovor
  56.       printf("\n fgets %s", mem);   // Ovdje ispisuje ono sto je izvukao iz odgovori.txt
  57.      
  58.       k=strcmp(odgovor,mem);
  59.       if(k == 0)
  60.           printf("\nTacno");
  61.       else
  62.           printf("\nNetacno");
  63.          
  64.       printf("\nk = %d", k);
  65.          
  66.       getch();
  67. }
  68.                    
  69.                
]

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

  1. if(oFile != NULL)
  2. {
  3.          while(!feof(oFile))
  4.          {
  5.             fgets(liner, 81, oFile);
  6.             if(i == line)
  7.             {
  8.                  fgets(mem, 81, oFile);
  9.                  }
  10.             line++;
  11.             }
  12. }

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 903 korisnika na forumu :: 44 registrovanih, 4 sakrivenih i 855 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: Abebe Bikila, acatomic, Akiro, bbrasnjo3, bigfoot, djordje92sm, DJUNTA, Frunze, IQ116, Iskander, istina, IvanMiletic, K2, Koja79, Kototamopeva, leptirleptir, LostInSpaceandTime, m0nstrum_, MarijaC84, marko308, mercedesamg, Metanoja, moldway, nuki1234, pacika, Parker, Petar888, pisac12, procesor, Profesor_018, sale_bih, Schepan, sekretar, smuk, Srki94, stankolich, Tas011, TRZH92, vukajlo71, vukan0799, Vzor50, wolverined4, x78186, Čivi