Proba odczytania pliku.

0

Chciałbym sie dowiedzieć jak zrobić żeby fscanf pobierał cały tytuł zamiast pierwszego słowa tytułu w programie :
tak wygląda plik txt:
Zbigniew a Janusze i Roberty 10
Andrzej b Radio 15
Bogdan a Plebania 20
Jonasz c Mosty 17

Wczytałem go za pomocą kodu :

include <stdio.h>
include <stdlib.h>
int main()
{
FILE *autorzy2=fopen("autorzy.txt","r");
struct ksiegarnia
{
    char imie[30];
    char znak;
    char tytul[30];
    int cena;
}n[10];
int a=0,b=0;

while(fscanf(autorzy2,"%s %c %s %d",n[b].imie,&n[b].znak,n[b].tytul,&n[b].cena)!=EOF)
{    b++;
}
fclose(autorzy2);
return 0;
}

wczytuje samo Janusze.

0

Więc powiedz jakiego słowa nie rozumiesz z tego co napisano tu: http://4programmers.net/Forum/1202362

  1. To co podałeś nie jest zapisanym binarnie plikem, ponieważ w pliku takim ceny nie odczytasz, będzie wyglądała jak zestaw krzaczków.
  2. Z tego formatu co podałeś nie da się w żaden sposób odczytać twojego rekordu ponieważ nie wiadomo czy Zbigniew a Janusze i Roberty oznacza '{"Zbigniew",'a',"Janusze i Roberty"}' czy też '{"Zbigniew a Janusze",'i',"Roberty"}'
  3. Aby plik odczytać binarnie trzeba go najpierw binarne zapisać.

Jeżeli jest tak jak piszesz w komentarzu a propos rozwiązania problemu z zapisem binarnym to pokaż jak to zrobiłeś.

0

Nie rozumiem rozwiązania z buforem ;/ A jeżeli chodzi o plik binarny to widocznie wczesniej musiałem go źle zapisać. Kod który umieściłem był dobry.

0

Rozwiązania z buforem nie należy rozumieć, trzeba o nim zwyczajnie zapomnieć.

  1. Kod który umieściłeś niczego nie zapisuje.
  2. Poprawny kod odczytu napisany przeze mnie z dużym prawdopodobieństwem nie zadziała poprawnie ponieważ musi współgrać z nieznanym mnie zapisem.
    Najpierw podaj jak wygląda zapis, wtedy można kombinować z odczytem.
0

Właśnie nie chce żeby coś zapisywał tylko probóje znaleŹć sposób do odczytywania całego tytułu (chce to zrozumieć).

1

Nie możesz odczytać tego co nie zapisano.
Kolejny raz powtarzam: - "Najpierw zapis, później odpowiedni odczyt." - powiedz jakiego słowa nie rozumiesz.

0

Okej , tutaj napisałem kod żeby zapisywał do pliku strukture:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *autorzy2=fopen("autorzy3.txt","w");
struct ksiegarnia
{
char imie[30];
char znak;
char tytul[60];
int cena;
}n[10];
int a=0,b=0,i=0;
for(i=0;i<2;i++){
printf("podaj imie:\n");
scanf("%s",n[i].imie);
printf("podaj znak:\n");
getchar();
scanf("%c",&n[i].znak);
printf("podaj tytul:\n");
getchar();
gets(n[i].tytul);
printf("podaj cene:\n");
scanf("%d",&n[i].cena);
}
for(i=0;i<2;i++)
{

fprintf(autorzy2,"%s %c %s %d \n",n[i].imie,n[i].znak,n[i].tytul,n[i].cena);
}
fclose(autorzy2);
return 0;
}
A teraz chce się dowiedzieć jak to odczytać za pomocą struktury i zapisać do pliku tekstowego.

0
  1. Na temat tego zapisu już dostałeś informacje - NIE MA MOŻLIWOŚCI POPRAWNEGO ODCZYTU - koniec kropka.
  2. Cały czas mówisz o zapisie/odczycie binarnym zaś to co pokazujesz to zapis tekstowy.
0

Źle mnie zrozumiałeś, sprawe z zapisem/odczytem binarnym już skonczyłem. Problem tkwi w tym że chce się nauczyć odczytywać plik tekstowy i umieścić go w takiej strukturze. Największym problemem jest odczytanie, zapis jest prosty.

0

Nie jest prosty skoro totalnie go skopałeś.

0

Dopiero zaczynam programować więc nie znam lepszych metod. A co do odczytu , powiesz mi jak to zrobić?

0

Tak, powiem jak odczytać o ile powiesz jak zapisałeś.

0

W taki sposób :
for(i=0;i<2;i++)
{

fprintf(autorzy2,"%s %c %s %d \n",n[i].imie,n[i].znak,n[i].tytul,n[i].cena);
}
Ogólnie mieliśmy zadanie napisać program który zapisuje do pliku tekstowego tą strukture w postaci:
Autor1 Znak1 Tytul1 Cena1
Autor2 Znak2 Tytul2 Cena2
itp.
Wiec ogolnie pomysł jest dobry ale gorzej z odczytaniem.

0

Błagam, powiedz którego słowa nie rozumiesz:

  1. w pkt 2 tu: http://4programmers.net/Forum/1202386
  2. w pkt 1 tu: http://4programmers.net/Forum/1202412
    bo, dopóki tego nie zrozumiesz tak i będziemy mielić w kółko to samo.
0

Nie rozumiem w jaki sposób to zapisać do pliku żeby tak jak wcześniej napisałeś móc rozróżnić zmienne strukturalne (1.).

0

Np tak: http://ideone.com/B3Si1I

#include <stdio.h>

struct ksiegarnia
  {
   char imie[30];
   char znak;
   char tytul[30];
   int cena;
  } 
tb[100];

int main()
  {   
   int i=0,count;
   while((i<100)&&(fscanf(stdin," %29[^;]s",tb[i].imie)>0)&&(fscanf(stdin,"%*c %c",&tb[i].znak)>0)&&(fscanf(stdin," %29[^;]s",tb[i].tytul)>0)&&(fscanf(stdin,"%*c %d",&tb[i].cena)>0)) count=++i;
   for(i=0;i<count;++i) fprintf(stdout,"%s; %c %s; %d\n",tb[i].imie,tb[i].znak,tb[i].tytul,tb[i].cena);
   return 0;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1