Witam czy jest możliwośc np w zmiennej char="alela [ lulale" jest możliwosć dostania sie do '[' i edytowanie go np na '\n' ?
z góry dziekuje za pomoc
Tak, np. pobierając wskaźnik do niego używając strchr.
Ale jak mam to w zmiennej gdzie wszystko zapisalo sie w t[1] bo są to znaki wczytane z pliku za pomoca fscanf to tez sie jakos da?
Jeżeli t
to tablica, to jakim cudem "wszystko" mogło się zapisać w jednym elemencie tablicy charów? Mowa o t[1]
.
Chętnie bym pomógł, ale nie opisałeś problemu na tyle dobrze żeby dało się Ci sensownie odpowiedzieć.
Aczkolwiek bezpośrednia odpowiedź na twoje pytanie brzmi "tak, da się". (podobnie jak wszystko inne)
#include <stdio.h>
#include <stdlib.h>
#define DEF 25
struct {
int nr; //numer tekstu pokazanego
int p; //czas kiedy sie pokazuje
int k; //czas kiedy znika
char t[100]; //tekst 1
char t2[50];
}u;
struct czas{
int g; //godziny
int s;//sekundy
int m;//minuty
int ms;//milisekundy
}p,k;
void wyp (struct czas l,int f,int c){
l.ms=(f*c)%1000;
l.s=((f*c)/1000)%100;
l.m=(((f*c)/1000)/100)%100;
l.g=((((f*c)/1000)/100)/100)%100;
}
void poprawa(struct czas l){
if (l.ms ==0) p.ms=040;
if (l.ms ==0) k.ms=040;
if (l.ms==1000){
l.s=l.s+1;
l.ms=0;}
}
void main(int argc,char *argv[]){
FILE *wejsciowy,*wyjsciowy;
int fps,i,c,n;
n=0;
if (argc=3) fps=DEF;
else fps=atoi(argv[3]);
c=1000/fps;
if((wyjsciowy=fopen(argv[1],"a+"))<0) exit(-1);
if((wejsciowy=fopen(argv[2],"r"))<0) exit(-1);
for(i=0;!feof(wejsciowy);i++,n++){
fscanf(wejsciowy,"{%d}{%d}%[^\n]\n",&u.p,&u.k,u.t);
wyp(p,u.p,c);
wyp(k,u.k,c);
poprawa(p);
poprawa(k);
fprintf(wyjsciowy,"%d\n%.2d:%.2d:%.2d:%.3d --> %.2d:%.2d:%.2d:%.3d\n%s\n\n",n,p.g,p.m,p.s,p.ms,k.g,k.m,k.s,k.ms,u.t);
}
}
chodzi o ten kod jest to konwertowanie z txt na srt i wczytuje linie {123}{123}-tekst1 | tekst2 gdzie chce aby | bylo znakiem nowej lini.
ale wyskakuje mi tutaj naruszenie ochrony pamieci ? Moglby ktos powiedziec jaki robie blad?
Jednak program działa ale cos jakby w ogole nie dzialala ta funkcja wyp . Pomogł by ktos?
Odwołujesz się do kopii struktury, która powstała przy wywołaniu funkcji. Najlepszym rozwiązaniem będzie użycie wskaźnika do tej struktury.
BTW a na zegarku to się znasz ?
a jaki jest inny sposób zeby z sekund zrobic dokladnosc co do milisekundy przy określonej ilosci fps?
wiesz jak wciecia poprawiaja czytelnosc kodu? Wiesz jak czytelnosc poprawia rozdzielenie definicji od deklaracji?
#include <stdio.h>
#include <stdlib.h>
#define DEF 25
struct nazwijto {
int nr; //numer tekstu pokazanego
int p; //czas kiedy sie pokazuje
int k; //czas kiedy znika
char t[100]; //tekst 1
char t2[50];
}
struct czas{
int g; //godziny
int s;//sekundy
int m;//minuty
int ms;//milisekundy
}
nazwijto u;
czas p,k;
void wyp (struct czas* l,int f,int c){
(*l).ms=(f*c)%1000; // tak
l->s=((f*c)/1000)%100; // albo tak
l->m=(((f*c)/1000)/100)%100;
l->g=((((f*c)/1000)/100)/100)%100;
}
void poprawa(struct czas* l){
if (l->ms ==0) p.ms=040; // globalne, lokalne, ehhh
if (l->ms ==0) k.ms=040;
if (l->ms==1000){
l->s=l->s+1;
l->ms=0;
}
}
int main(int argc,char *argv[]){ // int !!!! to ze bcb czy inne pomioty przyjmują void nie znaczy ze nie trzeba deklarowac main z int na wyjściu
FILE *wejsciowy,*wyjsciowy;
int fps,i,c,n;
n=0;
if (argc=3){
fps=DEF;
}else fps=atoi(argv[3]);
c=1000/fps;
if((wyjsciowy=fopen(argv[1],"a+"))<0) exit(-1);
if((wejsciowy=fopen(argv[2],"r"))<0) exit(-1);
for(i=0;!feof(wejsciowy);i++,n++){
fscanf(wejsciowy,"{%d}{%d}%[^\n]\n",&u.p,&u.k,u.t);
wyp(p,u.p,c); // wiesz co to zmienne lokalne?
wyp(k,u.k,c); // poza tym masz w deklaracji funckji 3 parametry, w wywolaniu 4
poprawa(&p); // wskaznik do struktury
poprawa(&k);
fprintf(wyjsciowy,"%d\n%.2d:%.2d:%.2d:%.3d --> %.2d:%.2d:%.2d:%.3d\n%s\n\n",n,p.g,p.m,p.s,p.ms,k.g,k.m,k.s,k.ms,u.t);
}
return 0; // a 0 zwracasz jeśli wszystko poszlo ok, w innym wypadku nie-0
}
robisz błędy wszędzie.
jedno mi sie podoba w tym co napisałes:
if (warunek) { // poczatek bloku w tej samej linii
} // a koniec pod instrukcja, ktora po ktorej jest wykonywany
i tylko tyle
// Do newbie
poza tym masz w deklaracji funckji 3 parametry, w wywolaniu 4
w wywołaniu też są 3 :) struktura int z u.p i int zmiennej c .