fscanf i struktura

0

Witam czy jest możliwość po wczytaniu linijki z pliku "{735}{785}- Jaki gatunek?|/- Nie wiem." wpisania tego w strukture w nastepujacy sposób?

struct {
	   int nr; //numer tekstu pokazanego
	   int p_t; //czas kiedy sie pokazuje
	   int k_t; //czas kiedy znika
	   char t[100]; //tekst 1
	   
}plik;
 

do plik.p_t wpisać liczbe 735 do k_t 785 a do t wszystko po } ? by było mniej wiecej cos takiego
plik.p_t=735;
plik.k_t=785;
plik.t="- Jaki gatunek?\n/- Nie wiem.";

jedyne co mi sie udalo to dosc jakos do 735 i 785 ale bez mozliwosci do przejscia do nowej lini w pliku txt. taka (pewnie beznadziejną ) operacja:

 for(i=0;i>=-1;i++){
		zmienna[i]=getc(wejsciowy);
		if (zmienna[i]=='\n') break;
		if (zmienna[i]=='{') {
		   s=i+1;
		   b++;
		   continue;
		   } 
		if (zmienna[i]=='}') {
		   					 if (b==1)         {
		   					     if (n==3) plik.p_t=((zmienna[s]-48)*100)+((zmienna[s+1]-48)*10)+((zmienna[s+2]-48)*1);
					             else plik.p_t=((zmienna[s]-48)*1000)+((zmienna[s+1]-48)*100)+((zmienna[s+2]-48)*10)+((zmienna[s+3]-48)*1);
		   					     n=0;
									continue;  }
		   					 else {
    	      				     if (n==3) plik.k_t=((zmienna[s]-48)*100)+((zmienna[s+1]-48)*10)+((zmienna[s+2]-48)*1);
					             else if (n==4) plik.k_t=((zmienna[s]-48)*1000)+((zmienna[s+1]-48)*100)+((zmienna[s+2]-48)*10)+((zmienna[s+3]-48)*1);
  		   					      }
	 						 s=i+n;
							 }
	 if (i>=s) {
	 f++;
	 plik.t[f]=zmienna[i];
	 }
		n++;
		}

czy istnieje jakis inny "szybszy" sposób? z góry dziekuje za pomoc.

0

a to n jest dlatego bo istnieje możliwość {xxxx}{xxxx} zamiast {xxx}{xxx}

0

Pojawiał się już tutaj podobny problem. Pamiętaj, że scanf() pozwala również na stosowanie znaków specjalnych poza specyfikatorami konwersji. Możesz choćby wczytać i porzucić pierwszy znak, wczytać int, wczytać i porzucić 2 znaki, wczytać drugiego inta, porzucić jeden znak, czytać stringa aż do końca linii.

0

ale gdy wczytam to pozniej nie moge odwolac sie np do zmienna[i] bo istnieje tekst pod zmienna[0] i jest tam wszystko ;/

0

moglby ktos wytlumaczy z tym scanf?

0

jednak udalo mi sie za pomoca fgets i zrobilem sobie unie gdzie do jednej zmiennej char wpisalem sobie cala linie potem na 2 char w uni moze wyciagac sobie ktory chce :) dziekuje za pomoc

0

Jak masz taki plik:

{0}{120}Warszawa - 20:00

To można to przecież zrobić tak:

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

typedef struct {
  int start;
  int end;
  char* text;
} linia;

int main(void) {
FILE *plik;
linia wiersz;
char bufor[200]; 

plik = fopen("movie.txt", "r");

fscanf(plik, "{%d}{%d}", &wiersz.start, &wiersz.end);
fgets(bufor, 200, plik);

wiersz.text = (char*) malloc(sizeof(char*) * strlen(bufor)+1);
memcpy(wiersz.text, bufor, strlen(bufor)+1);

printf("Start-[%d], Koniec-[%d], Tekst-[%s]", wiersz.start, wiersz.end, wiersz.text);

return 0;
}

Jak chcesz wczytywać więcej linii to ze struktury robisz listę a wczytywanie wrzucasz w pętle.

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