• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Operacje na plikach - początkujący DUBLOWANIE SIE OSTATNIEGO WIERSZA

VPS Starter Arubacloud
0 głosów
130 wizyt
pytanie zadane 20 listopada 2018 w C i C++ przez Adiseeker Nowicjusz (200 p.)
edycja 20 listopada 2018 przez Adiseeker

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



int main ()
{
   FILE * fp;
   int i,j;

    char rows[255];
    int res;
   int len;


   char imie[21];
   char nazwisko[21];
   char adres[51];
   char miasto[61];
   char tel[10];
   char pesel[12];



/*

  printf("Podaj imie");
  scanf("%s",&imie);
 

  printf("Podaj nazwisko");
  scanf("%s",&nazwisko);
 


  printf("Podaj adres zamieszkania");
  scanf("%s",&adres);

  printf("Podaj miasto");
  scanf("%s",&miasto);
  


  printf("Podaj nr.tel");
  scanf("%s",&tel);
  

  printf("Podaj pesel");
  scanf("%s",&pesel);
  




   fp = fopen ("xd.txt","a");




       fprintf (fp, "|%s     |%s     |%s     |%s      |%s       |%s       |\n" ,pesel,imie,nazwisko,adres,miasto,tel);





   fclose (fp);


*/

  char* filename = "xd.txt";

    fp = fopen(filename, "r");
    if (fp == NULL){
        printf("Could not open file %s",filename);
        return 1;
    }
    while (fgets(pesel, 21, fp) != NULL)
        printf("%s", pesel);





fclose(fp);

char name[21];
printf("Podaj imie: ");
scanf("%s",name);





fp = fopen(filename, "r");

 if (fp == NULL)
    {
        printf("Could not open file %s",filename);
        return 1;
    }
while(fgets(rows,sizeof(rows),fp)!=NULL)
{



fscanf(fp,"%s %s %s %s %s %s",pesel,imie,nazwisko,adres,miasto,tel);

if (strstr(imie, name) != NULL)
    {


     printf("%s %s %s %s %s %s\n",pesel,imie,nazwisko,adres,miasto,tel);


    }



}



    fclose(fp);

    return 0;



}

 

 

char name[21];
printf("Podaj imie: ");
scanf("%s",name);





fp = fopen(filename, "r");

 if (fp == NULL)
    {
        printf("Could not open file %s",filename);
        return 1;
    }
while(fgets(rows,sizeof(rows),fp)!=NULL)
{



fscanf(fp,"%s %s %s %s %s %s",pesel,imie,nazwisko,adres,miasto,tel);

if (strstr(imie, name) != NULL)
    {


     printf("%s %s %s %s %s %s\n",pesel,imie,nazwisko,adres,miasto,tel);


    }



}

Witam mam do wykonania prostą bazę danych .Dane mają zostać zapisane do pliku ,nastepnie odczytane z pliku .

Powinny dodane zostac jeszcze filtry danych ,prawie wszystko działa ,ale przy filtrowaniu ostatnia linijka z pilku tekstowego jest zdublowana nie wiem co powoduje ten problem probowalem dac while()== 1 albo rowne ilosc wierszy w pliku tekstowym  przed "fscanf"  ,ale to nic nie daje .

Podalem specjalnie tez dwa kody drugi to czesc ,ktora dziala wadliwie ,a pierwszy to glowna czesc programu bez walidowania danych 

Drugim natomiast moim problem jest to ,że program nie czyta od poczatku pliku txt ,tylko zaczyna od drugiego wiersza.

Czy moglby ktos mi pomoc? 

1 odpowiedź

0 głosów
odpowiedź 20 listopada 2018 przez jeremus Maniak (59,720 p.)

to dlatego ze dublujesz czytanie wiersza przez fgets i fscanf

zrób tak zamiast fgets które nie jest Ci potrzebne

while( fscanf(fp,"%s %s %s %s %s %s",pesel,imie,nazwisko,adres,miasto,tel) != EOF  )

 

Podobne pytania

0 głosów
0 odpowiedzi 323 wizyt
pytanie zadane 8 grudnia 2018 w C i C++ przez matiibal Użytkownik (620 p.)
0 głosów
0 odpowiedzi 184 wizyt
pytanie zadane 29 stycznia 2018 w C i C++ przez Artur313 Użytkownik (790 p.)
+1 głos
1 odpowiedź 1,426 wizyt
pytanie zadane 6 września 2020 w JavaScript przez Marak123 Stary wyjadacz (11,190 p.)

92,973 zapytań

141,938 odpowiedzi

321,180 komentarzy

62,301 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...